我有一个想要动态加载的Bitmap图像。但是我无法加载它。
CBitmap bmp;
bmp.LoadBitmap("c:\\aeimg");
它似乎没有起作用。 有人可以帮助我。
感谢。
答案 0 :(得分:13)
你也可以尝试这样的事情:
CImage image;
image.Load(_T("C:\\image.png"));
CBitmap bitmap;
bitmap.Attach(image.Detach());
答案 1 :(得分:3)
根据CBitmap文档:LoadBitmap()
函数获取位图的资源标识符或位图的资源ID。
您无法指定位图文件的路径。
E.g。
MyProject.rc
------------
MYBMP BITMAP "res\myimage.bmp"
并确保resource.h没有MYBMP的任何条目,否则在预处理期间它被id替换,最终LoadBitmap()
将失败,因为应用程序无法找到资源FindResource()
失败。
现在这样做:
CBitmap bmp;
bmp.LoadBitmap(L"MYBMP");
肯定会加载位图。
答案 2 :(得分:1)
要从文件加载位图,您希望LoadImage
使用LR_LOADFROMFILE
标记。
答案 3 :(得分:1)
CBitmap
不支持直接从.bmp文件中读取。您可以使用其他答案中建议的CImage
类。您需要在代码中加入atlimage.h
才能使CImage
正常工作:
#include <atlimage.h>
:
CImage img;
img.Load (_T("C:\\image.bmp"));
CBitmap bitmap;
bitmap.Attach(img.Detach());
另一种方法是使用LoadImage
Win32 API加载图片,然后将CBitmap
附加到该图片:
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,"c:\\image.bmp",
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBitmap != NULL)
bitmap.Attach(hBitmap);
答案 4 :(得分:0)
CImage上次尝试/检查时无法使用png。看看CxImage - http://www.codeproject.com/KB/graphics/cximage.aspx。
答案 5 :(得分:0)
这可能就像你忘记逃避反斜杠一样简单。 而不是
bmp.LoadBitmap("c:\aeimg");
使用
bmp.LoadBitmap("c:\\aeimg");
否则,您将无效路径传递给LoadBitmap方法。
答案 6 :(得分:0)
CString filename;
TCHAR szFilter[] = _T("Bitmap (*.bmp)|*.bmp|PNG (*.png)|*.png||");
CFileDialog selDlg(TRUE, NULL, NULL, OFN_OVERWRITEPROMPT | OFN_EXTENSIONDIFFERENT, szFilter, this);
if (selDlg.DoModal() == IDOK)
{
filename = selDlg.GetPathName();
CImage image;
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
if (hBitmap)
{
// Delete the current bitmap
if (m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach(); // If there was a bitmap, detach it
// Attach the currently loaded bitmap to the bitmap object
m_bmpBitmap.Attach(hBitmap);
Invalidate();
}
}
答案 7 :(得分:0)
使用迄今为止提到的解决方案时,每次将CImage加载到CBitmap时,我都会使用CBitmap的成员变量来保持内存泄漏。我用以下代码解决了这个问题:
CString _fileName(/*Path to image*/);
CImage _image;
HRESULT hr = _image.Load(_fileName);
if (SUCCEEDED(hr)) {
if (m_Display.m_bmpImage.DeleteObject())
m_Display.m_bmpImage.Detach();
m_bmpImage.Attach(_image->Detach());
}