我最近发现了这个(Win32 API Speed Issues
为了提高绘图速度,但代码如下:

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

始终使图像翻转(从左下到右上),
你们知道怎么解决这个问题吗??
.
这是翻转的图像:
flipped-bitmap.png
这是我的代码:
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);

最佳答案

通常情况下,DIB部分从底部扫描线向上保存在内存中。
您可以将pBits索引调整为首先从下一行写入,或者更改描述DIB部分的BITMAPINFOHEADER上的高度符号。
例如:

bmp.bmiHeader.biHeight = -HEIGHT;

高度标志决定了DIB部分是否被视为自下而上或自上而下。

关于c - 使用Dib部分替换慢速SetPixel()时图像翻转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23420448/

10-10 12:51