سؤال

I recently found this (Win32 API Speed Issues) to improve drawing speed, but it seems the code :

pBits[(y * WIDTH) + x] = RGB(0, 0, 0xFF);

always make the image flipped (from bottom-left to top-right),

Do you guys know how to fix this problem ??

.

Here's the flipped image:

flipped-bitmap.png

Here's my code :

for (i=0; i<200; i++) {
    for (j=0; j<200; j++) {
        int x, y;
        cr1 = GetPixel(hdc_tmp, i*2, j*2);
        cr2 = GetPixel(hdc_tmp, i*2, 1+j*2);
        cr3 = GetPixel(hdc_tmp, 1+i*2, j*2);
        cr4 = GetPixel(hdc_tmp, 1+i*2, 1+j*2);

        red = (GetRValue(cr1) + GetRValue(cr2) + GetRValue(cr3) + GetRValue(cr4)) / 4;
        green = (GetGValue(cr1) + GetGValue(cr2) + GetGValue(cr3) + GetGValue(cr4)) / 4;
        blue = (GetBValue(cr1) + GetBValue(cr2) + GetBValue(cr3) + GetBValue(cr4)) / 4;

        pbits[i+j*200] = RGB(red, green, blue); // BUG ??
    }
}

BitBlt(hdc, 0, 0, 200, 200, hdc_aa, 0, 0, SRCCOPY);
هل كانت مفيدة؟

المحلول

It's common for a DIB section to be held in memory from the bottom scanline up.

You can either adjust your pBits index to write from the bottom row first, or change the sign of the height on the BITMAPINFOHEADER that describes the DIB section.

For example:

bmp.bmiHeader.biHeight = -HEIGHT;

The sign of the height determines whether or not the DIB section is treated as bottom-up or top-down.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top