求助高手帮忙能否将一小段VC转成AU3
本帖最后由 破帽遮颜 于 2010-6-22 19:08 编辑BOOL CJPGRES2BMPView::JpgRes2Bmp(UINT ResourceName, LPCSTR ResourceType, HBITMAP *lphBmp)
{
HGLOBAL hGlobal = NULL;
HRSRC hSource = NULL;
LPVOID lpVoid= NULL;
int nSize = 0;
IPicture* p_IPicture = NULL;
OLE_HANDLE hJpegBmp = 0;
// 1. 从资源中读取JPG文件数据
hSource = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(ResourceName), ResourceType);
if(hSource == NULL)
{
return(FALSE);
}
hGlobal = LoadResource(AfxGetResourceHandle(), hSource);
if(hGlobal == NULL)
{
return(FALSE);
}
lpVoid = LockResource(hGlobal);
if(lpVoid == NULL)
{
return(FALSE);
}
nSize = (UINT)SizeofResource(AfxGetResourceHandle(), hSource);
// 2. 分配内存并拷贝数据
HGLOBAL hGlobalMem = GlobalAlloc(GMEM_MOVEABLE, nSize);
if(hGlobalMem == NULL)
{
return(FALSE);
}
void* pData = GlobalLock(hGlobalMem);
memcpy(pData, (BYTE*)hGlobal, nSize);
GlobalUnlock(hGlobalMem);
// 3. 创建Stream
IStream* pStream = NULL;
if(CreateStreamOnHGlobal(hGlobalMem, TRUE, &pStream) == S_OK)
{
HRESULT hr;
if(E_NOINTERFACE == (hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&p_IPicture)))
{
return(FALSE);
}
else // S_OK
{
pStream->Release();
pStream = NULL;
}
}
// MSDN:not necessary for Win32-based applications
UnlockResource(hGlobal);
FreeResource(hGlobal);
FreeResource(hGlobalMem);
// 4.得到图像句柄,拷贝
if(p_IPicture != NULL)
{
// Get the handle to the image, and then copy it.
if((p_IPicture->get_Handle(&hJpegBmp)) != S_OK)
{
p_IPicture->Release();
p_IPicture = NULL;
*lphBmp = 0;
return(FALSE);
}
if((*lphBmp = (HBITMAP)CopyImage((HANDLE *) hJpegBmp, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG)) == NULL)
{
p_IPicture->Release();
p_IPicture = NULL;
*lphBmp = 0;
return(FALSE);
}
p_IPicture->Release();
p_IPicture = NULL;
return(TRUE);
}
else
{
p_IPicture->Release();
p_IPicture = NULL;
return(FALSE);
}
} 看过了,不会弄,在OleLoadPicture那里测试失败了。 这回帖速度 看过了,不会弄,在OleLoadPicture那里测试失败了。
pusofalse 发表于 2010-6-22 03:27 http://www.autoitx.com/images/common/back.gif
5555555~~~~~
实在找不到办法了~~~~~ VC转AU3总是比较困难
AU3实现这个是否可以用别的途径来实现上面的要求?没写过这种代码,不清楚,不过我下面的思路是否可行?
1、用AU3自行读取资源文件的JPG数据
2、将JPG数据放入内存,返回内存中数据的起启位置
3、如何将内存的起启位置转成位图句柄?(没有思路) 这是干哈呢,有哈用呢 VC转AU3总是比较困难
AU3实现这个是否可以用别的途径来实现上面的要求?没写过这种代码,不清楚,不过我 ...
C.L 发表于 2010-6-22 08:53 http://www.autoitx.com/images/common/back.gif
这样能不能成功呢
将jpg或者png在内存中转为位图,再读取位图句柄?
这样避免了将jpg转成bmp位图临时文件再进行读取的繁琐。不需要产生垃圾文件。
但如果图片多的情况下,会不会产生占用内存多的问题? 回复 7# 破帽遮颜
这样能不能成功呢
将jpg或者png在内存中转为位图,再读取位图句柄?
这样避免了将jpg转成bmp位图临时文件再进行读取的繁琐。不需要产生垃圾文件。
但如果图片多的情况下,会不会产生占用内存多的问题?
在内存中转换应该是可行,不过应该要自行处理将JPG头转换成BMP位图头,这个操作可是有点繁杂
如果图片多,占用内存肯定会很多。 回复 8# C.L
希望各位大大帮忙解决!
页:
[1]