我使用vckbase上的一个资料(使用GDI+在内存中转换图片类型),来抓取屏幕保存成jpg文件,但不成功,请问为什么啊? HBITMAP hBitmap = GetScreenBitmap();//得到屏幕位图句柄
HANDLE hData = Bitmap2Dib(hBitmap, 8或24);//Bitmap2Dib将句柄转为hdib的函数
UINT nSize = GlobalSize(hData);
CMemFile *pp=new Cmemfile((BYTE*)GlobalLock(hData),nsize);然后调用下边的函数,竟然不成功!!注:1...我若将下边的函数中的参数改用CFile,CFile打开一个已有的bmp文件,然后转为jpg,测试却可以成功!!
注:2...我的要求必须是将抓屏的位图转为IStream后,再转为BYTE,再保存到jpg文件,而不能直接保存为jpg文件--因为我要特殊处理BYTE后,才能写入到文件!! ,,,所以必须用下边的函数,或与其思路一致的!!BOOL MBmpToMImage(CMemFile& cbfBmp, CMemFile& cbfImage, CString strType)
{
//这个是从vckbase直接copy来的,原文中此函数语法有问题,
我已经修改了,但是在另一个电脑上,所以直接从vckbase中copy了下,但不影响阅读,仅仅个别语法有问题 int iBmpSize = cbfBmp.GetLength();
HGLOBAL hMemBmp = GlobalAlloc(GMEM_FIXED, iBmpSize);
if (hMemBmp == NULL) return FALSE;
IStream* pStmBmp = NULL;
CreateStreamOnHGlobal(hMemBmp, FALSE, &pStmBmp);
BYTE* pbyBmp = (BYTE *)GlobalLock(hMemBmp);
cbfBmp.SeekToBegin();
cbfBmp.Read(pbyBmp, iBmpSize);
Image* imImage = NULL;
imImage = Image::FromStream(pStmBmp, FALSE);
USES_CONVERSION;
CLSID clImageClsid;
GetImageCLSID(A2W("image/"+strType.GetBuffer(0)), &clImageClsid);
HGLOBAL hMemImage = GlobalAlloc(GMEM_MOVEABLE, 0);
IStream* pStmImage = NULL;
CreateStreamOnHGlobal(hMemImage, TRUE, &pStmImage);
imImage->Save(pStmImage, &clJpgClsid);
LARGE_INTEGER liBegin = {0};
pStmImage->Seek(liBegin, STREAM_SEEK_SET, NULL);
BYTE* pbyImage = (BYTE *)GlobalLock(hMemImage);
cbfImage.SeekToBegin();
cbfImage.Write(pbyImage, GlobalSize(hMemImage));
if (imImage != NULL) delete imImage;
pStmBmp->Release();
.....->Release();
GlobalUnlock(
.......
..... return TRUE;
}
解决方案 »
- 在dialog中放上一个static text, 用代码 GetWindowRect, ScreentoClient ,得到的左上坐标为 -1, -1
- 有一软件窗口和控件功能开发需要外包,寻找界面开发高手。
- WebBrowser控件如何显示最后一页html?
- 请大家推荐几本书!
- BSTR转换为Char*的问题
- 有一句代码,不懂意思,请指教
- 如何得到文档在系统中关联的图标?就像资源管理器那样!
- 开发一个web页面中的打印控件,用来打印web页中的表格等(包括页面设置、预览等功能),用ATL做好还是用MFC ACTIVEX,有什么好的建议吗
- 为什么BSTR类型属性不能保持
- 利用Matcom在VC里画三维曲线图的问题 (matcom是matlab和VC混编用到的工具)
- nagios怎么配置
- GDI+1.1怎么保存动态GIF,网上没有一点资料.
通过data直接创建Bitmap
通过Bitmap的Save保存成jpg
第二你可以通过实现IStream的内存版本再通过image.save来实现内存转换。