HBITMAP hbmp;
EmptyClipboard();
::OpenClipboard(hWnd);
hbmp = (HBITMAP)::GetClipboardData(CF_BITMAP);
CStatic *pStatic = (CStatic*)(AfxGetApp()->m_pMainWnd->GetDlgItem(IDC_VIDEOANNY));
pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE); //设置样式位图并居中
pStatic->SetBitmap(hbmp); //设置静态控件显示位图上面是一段代码,剪贴板中有bmp图象的信息,我已经提出来了并显示到控件上..我的问题是如果我想把它变成灰度图再显示,中间处理怎么做?(变灰度的程序不需要)
我想知道的是怎么从HBITMAP得到信息,最后经过中间处理后再变回HTIMAP显示到控件上,
希望大家能帮帮忙,思路什么的都行
关于对HBITMAP的操作可以看MSDN,上面非常详细
再用GetBitmapBits获取数据,
然后逐行处理数据(灰度公式sqrt(r*r+g*g+b*b)),SetBitmapBits替换回去
最后pStatic->SetBitmap(hbmp); //设置静态控件显示位图
前面BMP的头也需要设定,所以整个过程下来你还是相当于做了一次BMP图像转换。
所以还是干脆直接使用BMP的转换函数,再重新去获得一个句柄来的比较实在,
代码支持也能找到,要按照你现在的方法弄下去还不知道会出来什么问题呢。
HDC hdc, // handle to device context
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // first scan line to set in destination bitmap
UINT cScanLines, // number of scan lines to copy
LPVOID lpvBits, // address of array for bitmap bits
LPBITMAPINFO lpbi, // address of structure with bitmap data
UINT uUsage // RGB or palette index
);
请问一下这个函数里面的LPBITMAPINFO 参数,我传进去一个BITMAPINFO变量,能得到hbmp句柄所在的图的信息吗
文件头是bmp文件才需要的,HBITMAP不需要文件头,所以没有关联