我使用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;
}