need help - BEGINNER

Started by
1 comment, last by Theses 24 years, 5 months ago
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

Advertisement
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).]

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

This topic is closed to new replies.

Advertisement