首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GetDIBits()时遇到问题

使用GetDIBits()时遇到问题
EN

Stack Overflow用户
提问于 2013-05-15 23:04:32
回答 3查看 1.9K关注 0票数 0

以下使用GetDIBits()的代码没有给出所需的输出:

代码语言:javascript
复制
#include <windows.h>
#include <iostream>
using namespace std;
int main() {int i; HDC MemDC=CreateCompatibleDC(NULL);
    HBITMAP hBit=(HBITMAP)LoadImage(NULL,(LPCTSTR)"F:\\gBit.bmp",IMAGE_BITMAP,1366,768,LR_CREATEDIBSECTION);
    SelectObject(MemDC,hBit);


    BITMAPINFO bmi;
    bmi.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
    bmi.bmiHeader.biWidth=1366;
    bmi.bmiHeader.biHeight=1;
    bmi.bmiHeader.biPlanes=1;
    bmi.bmiHeader.biBitCount=24;
    bmi.bmiHeader.biCompression=BI_RGB;
    bmi.bmiHeader.biSizeImage=0;
    bmi.bmiHeader.biXPelsPerMeter=0;
    bmi.bmiHeader.biYPelsPerMeter=0;
    bmi.bmiHeader.biClrUsed=0;
    bmi.bmiHeader.biClrImportant=0;


    BYTE p[3*1366];
    GetDIBits(MemDC,hBit,500,1,p,&bmi,DIB_RGB_COLORS); //My screen width is 1366 and I want to get the pixels of the 500th line
    for (i=0; i<3*1366; i+=3) {cout<<p[i]<<endl;}
    DeleteObject(hBit);
    ReleaseDC(NULL,MemDC); DeleteDC(MemDC);
}

(gBit.bmp是全白的1366x768位图。)

我刚接触C++,对如何使用这个函数几乎一无所知。由于gBit的每个像素都是白色的,但显示的是随机值,其中大多数都是0,所以我希望所有i大于或等于0且小于或等于3*1366的所有i都是255。我是不是没有正确地使用这个函数,或者是其他地方的错误?

编辑:似乎GetDIBits()无法将像素数据保存在p中,因为当我删除包含GetDIBits()的行时,会返回相同的值。我这次没有选择hBit到DC中。还会有什么问题呢?

EN

回答 3

Stack Overflow用户

发布于 2013-05-16 00:00:52

MSFT文档声明:“当应用程序调用此函数时,由hbmp参数标识的位图不能被选择到设备上下文中。”(http://msdn.microsoft.com/en-us/library/windows/desktop/dd144879%28v=vs.85%29.aspx)。

这可能是问题的一部分。

还要注意的是,您不应该对仍被选中到DC中的位图调用DeleteObject

票数 0
EN

Stack Overflow用户

发布于 2013-09-24 06:49:05

尝试将您的BitBlt函数的第三个参数改为0(我不太清楚为什么它是500,因为您的位图只包含一条扫描线)。

还要注意,由于24位位图是DWORD对齐的(最后一个未使用的字节用0填充),因此每个扫描线消耗4字节的倍数,因此您的文件大小实际上不是1366*3,而是1368*3。

票数 0
EN

Stack Overflow用户

发布于 2013-10-30 20:42:06

即使你只需要一行,你仍然需要在BITMAPINFO结构中设置完整的高度:

代码语言:javascript
复制
bmi.bmiHeader.biHeight=768;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16568622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档