# 24BPP Bitmap-16BPP Surface SOLVED

This topic is 4466 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

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]

##### Share on other sites
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...

##### Share on other sites
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

##### Share on other sites
Hey,

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

I made the mistake not to devide the Pitch by 2

Yours sinserelly
Damien K.

1. 1
2. 2
frob
16
3. 3
Rutin
12
4. 4
5. 5

• 13
• 12
• 59
• 14
• 15
• ### Forum Statistics

• Total Topics
632124
• Total Posts
3004243

×