代码之家  ›  专栏  ›  技术社区  ›  I101I

如何镜像HBITMAP

  •  0
  • I101I  · 技术社区  · 2 年前

    如何水平翻转HBITMAP?作为一种选择,我想从位图中获取一组颜色,然后将它们写入另一个位图,但不知怎么的,它太忙了。是否有内置功能或其他选项来实现这一点?

    0 回复  |  直到 2 年前
        1
  •  0
  •   jwezorek    2 年前

    你可以用 StretchBlt 负维度,如下所示:

    HBITMAP FlipBitmapHorizontally(HBITMAP hbm) {
        BITMAP bm;
        GetObject(hbm, sizeof(BITMAP), &bm);
        int wd = bm.bmWidth;
        int hgt = bm.bmHeight;
    
        HDC hdcScr = GetDC(NULL);
        HDC hdcFlipped = CreateCompatibleDC(hdcScr);
        HBITMAP hbmFlipped = CreateCompatibleBitmap(hdcScr, wd, hgt);
        HGDIOBJ oldFlipped = SelectObject(hdcFlipped, hbmFlipped);
        HDC hdcSrc = CreateCompatibleDC(hdcScr);
        HGDIOBJ oldSrc = SelectObject(hdcSrc, hbm);
    
        StretchBlt(hdcFlipped, wd, 0, -wd, hgt, hdcSrc, 0, 0, wd, hgt, SRCCOPY);
    
        SelectObject(hdcSrc, oldSrc);
        DeleteDC(hdcSrc);
        SelectObject(hdcFlipped, oldFlipped);
        DeleteDC(hdcFlipped);
        ReleaseDC(NULL, hdcScr);
    
        return hbmFlipped;
    }