c++ - 如何将 StretchDIBits 的原点设置为左上角?

标签 c++ winapi

我正在使用 Win32Api,我正在寻找一种将 BGR(或 RGB、BGRA、RGBA...)数据加载到窗口的方法。

从左下角开始向上编织,就像这一段。
逐渐向下直到右下角结束,StretchDIBits
而不是从左上角开始,到右上角,然后

这就是我制作 winW 和 winH 的方式:

const unsigned int winW = 800;
const unsigned int winH = 600;
unsigned char buffer1[winW * winH * 3]; // desired window data array, one-dimensional

这(已修整)是我目前使用 WindProc 方法的方式:

PAINTSTRUCT ps;
HDC hDC;
RECT client;
switch (message)
{
case WM_PAINT:
    hDC = BeginPaint(hwnd, &ps);
    GetClientRect(hwnd, &client);
    StretchDIBits(hDC,
        0, 0,
        client.right, client.bottom,
        0, 0,
        winW, winH,
        buffer1, &bitInfo, DIB_RGB_COLORS, SRCCOPY);
    EndPaint(hwnd, &ps);

如果我试图沿着中心水平线翻转它(交换 winH 和它的 0,或者 client.bottom 和第二个 0),我得到的只是一个空白的白色屏幕。

我对缩放或调整窗口大小不是特别感兴趣,因此可以使用不同的函数或方法。

最佳答案

垂直翻转位图:

client.bottom 开始获取 Y 坐标。然后将高度符号交换为 -client.bottom:

StretchDIBits(hDC,
    0, client.bottom,
    client.right, -client.bottom,
    0, 0,
    winW, winH,
    buffer1, &bitInfo, DIB_RGB_COLORS, SRCCOPY);

关于c++ - 如何将 StretchDIBits 的原点设置为左上角?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50571103/

相关文章:

.net - 是否有 API 调用来开始扫描硬件设备

C++如何检查2个相似文件中不存在的单词

c++ - 使循环工作必须在 C++ 中计算每个 i

c++ - 将一个 std::vector 附加到另一个末尾的最有效方法是什么?

c++ - 使用类时未解析的外部符号(OpenGL、C++)

c++ - 使用 SHFileOperation : What errors are occuring

c++ - 关于使用 C++ 使用命令行参数调用 CreateProcessAsUser 的说明

winapi - DirectWrite ScriptAnalysis 从索引中获取脚本名称

c++ - 导出 outlook 联系人

c++ - 比较 float 和 int