GetDIBits的问题.

syp 2001-09-17 01:32:17
如何使用这个函数,在2000下没有问题,在98下返回错误代码87(无效参数),不知如何解决,众位高手有没有办法?

16*16的16色位图
BYTE piex[16*3][16*3];//随便写的,大小应当没有问题.
BITMAPINFO infor;
ZeroMemory(&infor,sizeof(BITMAPINFO));
infor.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
infor.bmiHeader.biWidth=16;
infor.bmiHeader.biHeight=16;
infor.bmiHeader.biPlanes=1;
infor.bmiHeader.biBitCount=4;
infor.bmiHeader.biCompression=BI_RGB;

int returnv=GetDIBits(drawitem->hDC,hBitmap,1,2,piex,&infor,DIB_RGB_COLORS);//HDC来自自绘菜单的WM_DRAWIREM消息
DWORD ret=GetLastError();
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
syp 2001-09-18
  • 打赏
  • 举报
回复
to: ringphone(临风)

我只取得两行的像素,32个像素,那个数组怎么也够了。
Julienjut 2001-09-18
  • 打赏
  • 举报
回复
你调试一下你传递的参数先
ringphone 2001-09-18
  • 打赏
  • 举报
回复
infor.bmiHeader.biBitCount=4;
你指定是16色,然后GetDIBits时指定DIB_RGB_COLORS,使用RGB,得到的图象数据应该还是RGB,数据是32位的,piex[16*3][16*3]应该是piex[16*16*sizeof(RGBQUAD)],2000的内存保护机制比98好,这是一个原因,另一个原因可能是2000可以BITMAPINFO指定有调色板,RGB取,98就不行了。
lydragon 2001-09-18
  • 打赏
  • 举报
回复
我想你需要給出infor.bmi.Header.biSizeImage的值(這應該是必須的)!
syp 2001-09-18
  • 打赏
  • 举报
回复
再加40分,没人知道?
syp 2001-09-17
  • 打赏
  • 举报
回复
大家帮帮忙.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧