首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

命啊 SetBitmapBits GetBitmapBits有关问题

2012-04-03 
大虾 求救命啊啊啊啊 SetBitmapBits GetBitmapBits问题先贴代码 各位可以随便建个对话框工程拉个按钮就可

大虾 求救命啊啊啊啊 SetBitmapBits GetBitmapBits问题
先贴代码 各位可以随便建个对话框工程拉个按钮就可以测试了

static HDC hScrDC, hMemDC;//屏幕和内存设备描述表 
static HBITMAP hBitmap, hBitmap2;// 位图句柄 



//为屏幕创建设备描述表 
hScrDC = ::GetDC(NULL); 
HDC htest = ::GetDC(this->m_hWnd);
//为屏幕设备描述表创建兼容的内存设备描述表 
hMemDC = CreateCompatibleDC(hScrDC); 

// 创建一个与屏幕设备描述表兼容的位图 
hBitmap = CreateCompatibleBitmap(hScrDC, 200, 200); 
hBitmap2 = CreateCompatibleBitmap(hScrDC, 200, 200); 
// 把位图选到内存设备描述表中 
(HBITMAP)SelectObject(hMemDC, hBitmap); 

// 把屏幕设备描述表拷贝到内存设备描述表中 
BitBlt(hMemDC, 0, 0, 200, 200, hScrDC, 200, 200, SRCCOPY); 


char *buff = new char[40000];
int i = GetBitmapBits(hBitmap, 40000, (LPVOID)buff);


int i2 = ::SetBitmapBits(hBitmap2, 40000, buff);

// 把新位图选到内存设备描述表中 
(HBITMAP)SelectObject(hMemDC, hBitmap2); 

if (0 == ::StretchBlt(htest,0,0,200,200,hMemDC,40,40,200,200,SRCCOPY))
{
this->MessageBox("Set BIT eroor");
}

DeleteDC(hScrDC); 
DeleteDC(hMemDC); 

问题:
// 把新位图选到内存设备描述表中 
(HBITMAP)SelectObject(hMemDC, hBitmap2); 
我原本是想吧内存的位图复制到新位图上再重新选入设备描述表 可是程序只显示一点点 其他的都是全黑。。。怎么回事啊 求解释

[解决办法]
你的代码大体上没问题,错误出在GetBitmapBits,你只申请了40 000数据,远远不够。仅图形数据部分就200x200x4(32位色),还要再加上一些头数据。另外这个函数是兼容16位Windows用的,现在最好用GetDIBits/SetDIBits,参见http://blog.csdn.net/iamshuke/article/details/5749948,http://blog.csdn.net/iamshuke/article/details/5749933

热点排行