【问题标题】:Image flipped when using Dib Section to replace slow SetPixel()使用 Dib 部分替换慢速 SetPixel() 时图像翻转
【发布时间】:2014-05-02 03:54:08
【问题描述】:

我最近发现了这个 (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);

【问题讨论】:

    标签: c winapi


    【解决方案1】:

    DIB 部分从底部扫描线向上保存在内存中是很常见的。

    您可以调整您的pBits 索引以先从底行开始写入,或者更改描述DIB 部分的BITMAPINFOHEADER 上的高度符号。

    例如:

    bmp.bmiHeader.biHeight = -HEIGHT;
    

    高度的符号决定了DIB部分是被视为自下而上还是自上而下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 2019-02-03
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2012-08-23
      相关资源
      最近更新 更多