我正在处理一个MFC应用程序中的一些图片,我意识到CImage类(来自MFC)有两种保存类型:保存到文件和保存到IStream接口。我正在尝试使用那个IStream接口来保存到内存,使用CImage类的约定特性,而不使用其他库(例如,bmp到jpg的转换)。我不想保存文件,只想使用内存缓冲区。CImage对象已与图片文件一起加载。
但我不能使用这个IStream接口,因为我不能从那个类创建对象,也不知道如何创建缓冲区以用于保存(IStream* pStream...)功能。
任何一个例子都会很有帮助。
谢谢,维托
发布于 2015-07-29 11:42:41
首先,你应该把你的图片添加到一个资源id中,然后这样做:
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, CImage * & pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(nID), sTR); // type
if (!hRsrc)
return FALSE;
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE;
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem, lpRsrc, len);
IStream* pstm = NULL;
CreateStreamOnHGlobal(m_hMem, FALSE, &pstm);
// load from stream
//pImg = Gdiplus::Image::FromStream(pstm);
pImg = new CImage();
pImg->Load(pstm);
DWORD err = GetLastError();
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}https://stackoverflow.com/questions/31684400
复制相似问题