24BPP Bitmap-16BPP Surface SOLVED

Started by
2 comments, last by m4ster 17 years, 11 months ago
Hi, At the moment I'm trying to load a 24bpp bitmap and convert it to a 16bpp Image(5R6G5B). But every time I try to start my programm windows gives me a critical error. Plz help my guys, otherwise I'm going to die... (xD) Here's the convert part...

for(int cY=0; cY < ddsd.dwHeight; cY++)
{
	for(int cX=0; cX < ddsd.dwWidth; cX++)
		{
		BYTE red   = pbyImage[(cY*nBMPPitch+cX)*3+0],
		     green = pbyImage[(cY*nBMPPitch+cX)*3+1],
		     blue  = pbyImage[(cY*nBMPPitch+cX)*3+2];

		pwSurface[cY*ddsd.lPitch/2+cX] = _RGB16BIT565(red,green,blue);
	}
}



And here is the macro definition

#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((b & 31) << 11))



[Edited by - m4ster on June 14, 2006 12:52:08 PM]
Advertisement
Try:
BYTE red   = pbyImage[cY*nBMPPitch+cX*3+0],		     green = pbyImage[cY*nBMPPitch+cX*3+1],		     blue  = pbyImage[cY*nBMPPitch+cX*3+2];


If that doesn't work, try running in a debugger and provide us with more info...
Also
*((Uint16*)(pwSurface + (cY*ddsd.lPitch)+(cX*2))) = _RGB16BIT565(red,green,blue);
I am assuming:
ddsd.lPitch is the pitch of the 16bit surface
pwSurface is declared as an 8bit pointer
0xa0000000
Hey,

Thanks, Jack Sotac answer helped me a lot...

I made the mistake not to devide the Pitch by 2

Yours sinserelly
Damien K.

This topic is closed to new replies.

Advertisement