gpt4 book ai didi

winapi - 使用 Windows GetDIBits 函数获取位图像素值

转载 作者:行者123 更新时间:2023-12-01 15:53:30 27 4
gpt4 key购买 nike

我正在尝试使用 GetDIBits 函数获取位图的像素。由于我没有研究过 Windows GDI/API,所以我对第一个参数 HDC 非常不确定。我在 SO 和网络上搜索了无数帖子,但无法找到有关如何在这种特定情况下初始化 HDC 的信息或示例。这是我读取像素值的程度:

    HBITMAP hBitmap = (HBITMAP) LoadImage(0, L"C:/tmp/Foo.bmp" ,IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
// check hBitmap for error

BITMAP bm;
::GetObject( hBitmap , sizeof(bm) , &bm );

// TODO: GetDIBits()


解决方案:

在进一步搜索网络后,我能够拼凑出以下内容:

    /* Omitting error checks for brevity */
HDC dcBitmap = CreateCompatibleDC ( NULL );
SelectObject( dcBitmap, hBitmap );

BITMAPINFO bmpInfo;
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpInfo.bmiHeader.biWidth = bm.bmWidth;
bmpInfo.bmiHeader.biHeight = -bm.bmHeight;
bmpInfo.bmiHeader.biPlanes = 1;
bmpInfo.bmiHeader.biBitCount = 24;
bmpInfo.bmiHeader.biCompression = BI_RGB;
bmpInfo.bmiHeader.biSizeImage = 0;

COLORREF* pixel = new COLORREF [ bm.bmWidth * bm.bmHeight ];
GetDIBits( dcBitmap , hBitmap , 0 , bm.bmHeight , pixel , &bmpInfo , DIB_RGB_COLORS );

最佳答案

源位图通常是依赖于设备的位图。虽然现在不太常见,但这可能意味着位图的像素值作为索引存储到颜色表中。在这些情况下,GetDIBits 需要访问存储在设备上下文中的颜色表。

如果您的位图使用 RGB 值而不是索引,那么设备上下文应该是无关紧要的,但根据我的经验,您仍然必须提供一个有效的(参见 What is the HDC for in GetDIBits?),也许它会查看设备上下文的其他方面,比如颜色深度。

关于winapi - 使用 Windows GetDIBits 函数获取位图像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8657155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com