如何将StretchDIBits的原点设置到左上角?

时间:2018-05-28 17:26:57

标签: 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),我得到的只是一个空白的白色屏幕。

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

1 个答案:

答案 0 :(得分:1)

垂直翻转位图:

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

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