100分,一个简单问题!

Sime507 2005-10-10 11:13:20
GDI+编程将一个图片显示出来的代码:
Image image(L"Grapes.jpg"); //GDI+从文件中读图片
graphics.DrawImage(&image, 60, 10); //显示图片

我的图片从资源包中解压缩到内存中了,有没有办法让GDI+直接从内存中读数据?

这个问题困扰我好几天了,如果没有好的办法,只能将数据写到一个临时文件,再从文件中读取,不过这种方法严重影响程序效率。
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ddmor 2005-10-12
  • 打赏
  • 举报
回复
收藏。呵呵
saliors 2005-10-11
  • 打赏
  • 举报
回复
嗯,学习一下。
Kudeet 2005-10-10
  • 打赏
  • 举报
回复
//loading JPG and PNG files from resources using GDI+ ,This sample maybe help to //construct stream object.

bool CGdiPlusBitmapResource::Load(LPCTSTR pName, LPCTSTR pType,
HMODULE hInst)
{
Empty();

HRSRC hResource = ::FindResource(hInst, pName, pType);
if (!hResource)
return false;

DWORD imageSize = ::SizeofResource(hInst, hResource);
if (!imageSize)
return false;

const void* pResourceData = ::LockResource(::LoadResource(hInst,
hResource));
if (!pResourceData)
return false;

m_hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
if (m_hBuffer)
{
void* pBuffer = ::GlobalLock(m_hBuffer);
if (pBuffer)
{
CopyMemory(pBuffer, pResourceData, imageSize);

IStream* pStream = NULL;
if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK)
{
m_pBitmap = Gdiplus::Bitmap::FromStream(pStream);
pStream->Release();
if (m_pBitmap)
{
if (m_pBitmap->GetLastStatus() == Gdiplus::Ok)
return true;

delete m_pBitmap;
m_pBitmap = NULL;
}
}
m_pBitmap = NULL;
::GlobalUnlock(m_hBuffer);
}
::GlobalFree(m_hBuffer);
m_hBuffer = NULL;
}
return false;
}
Sime507 2005-10-10
  • 打赏
  • 举报
回复
楼上能不能讲的更详细些,如何构造IStream对象?
DentistryDoctor 2005-10-10
  • 打赏
  • 举报
回复
Image( IStream *stream,
BOOL useEmbeddedColorManagement
);

自己根据内存中的内容构造一个IStream对象,然后使用Image的上述构造函数即可。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧