Archived

This topic is now archived and is closed to further replies.

need help - BEGINNER

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

If you intended to correct an error in the post then please contact us.

Recommended Posts

Is there any reason you are using the pitch instead of the index_x in the final back_buffer placement?

You may want to () around the pitch shift.

Another odd thing, though it shouldnt be a problem, is that blue is defined in the loop while they others arent. Strictly syntax if they are both UCHARs still.

I dont see anything inherently wrong with the logic though.

-Geoff

Share this post


Link to post
Share on other sites
i have this annoying problem with bitmaps
apparently i can load bitmaps with any height
however apparently if the bitmap has a width of some odd number like 599 it fucks up bad.
i know i'm not explaining much about this code. its really weird when i change the width of the image i'm trying to display from 599 to 600 everything works just fine


for (int index_y = 0; index_y < bitmap.bitmapinfoheader.biHeight; index_y++)
{
for (int index_x = 0; index_x < bitmap.bitmapinfoheader.biWidth; index_x++)
{
UCHAR blue = (bitmap.buffer[index_y * bitmap.bitmapinfoheader.biWidth * 3 + index_x * 3 + 0]),
green = (bitmap.buffer[index_y * bitmap.bitmapinfoheader.biWidth * 3 + index_x * 3 + 1]),
red = (bitmap.buffer[index_y * bitmap.bitmapinfoheader.biWidth * 3 + index_x * 3 + 2]);

UINT pixel = _RGB32BIT(0, red, green, blue);

back_buffer[(index_y * ddsd.lPitch >> 2) + index_x] = pixel;
}
}

[This message has been edited by Theses (edited November 26, 1999).]

[This message has been edited by Theses (edited November 26, 1999).]

Share this post


Link to post
Share on other sites
Theses, the BMP file format aligns widths to 4. So your bitmap with 599 pixels wide is actually stored as 600 pixels (599 real, 1 padding) per line. So you have to write code to check for and compensate for this. This usually works:

int width_padding = ((width+3) & ~3) - width;

(What this line does is temporarily round the width up to the next multiple of 4, then subtracts it from the actual width. So, 599 temporarily becomes 600, and 600 - 599 = 1, so you have 1 byte of padding per scanline)

Every scanline has this many pixels of padding.

As a reminder, For 24bit bitmaps, every pixel padded adds 3 bytes, so don't forget this

BTW Microsoft should recall the BMP format, too many people are getting this problem.. I must have answered this same question a dozen times just on this board alone

Share this post


Link to post
Share on other sites