谁有VC++项目 关于加载图像(bmp,jpg等都行)的例子,传我一份,939504672@qq.com
3个回答
展开全部
例子本机电脑上没有,在公司,给你端代码,可以的
LPCSTR szFileUrl;
IPicture *pIPicture;
OleLoadPicturePath(CComBSTR(szFileUrl),
(LPUNKNOWN)NULL,
0,
0,
IID_IPicture,
(LPVOID*)&pIPicture))
OLE_XSIZE_HIMETRIC hmPicWidth;
OLE_YSIZE_HIMETRIC hmPicHeight;
pIPicture->get_Width(&hmPicWidth); // 获取图像宽度
pIPicture->get_Height(&hmPicHeight); // 获取图像高度
// 转化单位为象素
nPicWidth = MulDiv(hmPicWidth, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX), HIMETRIC_PER_INCH);
nPicHeight = MulDiv(hmPicHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), HIMETRIC_PER_INCH);
//下面绑定到位图
OLE_HANDLE phandle;
HRESULT hr = pIPicture->get_Handle(&phandle);
CBitmap bmp;
bmp.Attach((HBITMAP)phandle);
BITMAP tbmp;
bmp.GetBitmap(&tbmp);
//创建数组
byte *pbyBuf = new byte[tbmp. bmWidthBytes*tbmp.bmHeight*];
// 定义位图信息
BITMAPINFO bi;
bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth = tbmp.bmWidth;
bi.bmiHeader.biHeight = tbmp.bmHeight;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = tbmp.bmBitsPixel;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biSizeImage = tbmp.bmWidth * tbmp bmBitsPixel/8* tbmp.bmHeight;
bi.bmiHeader.biClrUsed = 0;
bi.bmiHeader.biClrImportant = 0;
//下面将数据的到数组里面
CClientDC hdc(this);
if (!::GetDIBits(hdc, (HBITMAP)bmp->GetSafeHandle();, 0, tbmp.bmHeight, pbyBuf , &bi, DIB_RGB_COLORS))
{
delete [] pbyBuf ;
pbyBuf = NULL;
}
//至于显示你可以用显示bmp的方法显示,因为你已经得到bmp对象了
也可以用
pIPicture->Render(.....);这个函数
LPCSTR szFileUrl;
IPicture *pIPicture;
OleLoadPicturePath(CComBSTR(szFileUrl),
(LPUNKNOWN)NULL,
0,
0,
IID_IPicture,
(LPVOID*)&pIPicture))
OLE_XSIZE_HIMETRIC hmPicWidth;
OLE_YSIZE_HIMETRIC hmPicHeight;
pIPicture->get_Width(&hmPicWidth); // 获取图像宽度
pIPicture->get_Height(&hmPicHeight); // 获取图像高度
// 转化单位为象素
nPicWidth = MulDiv(hmPicWidth, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSX), HIMETRIC_PER_INCH);
nPicHeight = MulDiv(hmPicHeight, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), HIMETRIC_PER_INCH);
//下面绑定到位图
OLE_HANDLE phandle;
HRESULT hr = pIPicture->get_Handle(&phandle);
CBitmap bmp;
bmp.Attach((HBITMAP)phandle);
BITMAP tbmp;
bmp.GetBitmap(&tbmp);
//创建数组
byte *pbyBuf = new byte[tbmp. bmWidthBytes*tbmp.bmHeight*];
// 定义位图信息
BITMAPINFO bi;
bi.bmiHeader.biSize = sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth = tbmp.bmWidth;
bi.bmiHeader.biHeight = tbmp.bmHeight;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = tbmp.bmBitsPixel;
bi.bmiHeader.biCompression = BI_RGB;
bi.bmiHeader.biSizeImage = tbmp.bmWidth * tbmp bmBitsPixel/8* tbmp.bmHeight;
bi.bmiHeader.biClrUsed = 0;
bi.bmiHeader.biClrImportant = 0;
//下面将数据的到数组里面
CClientDC hdc(this);
if (!::GetDIBits(hdc, (HBITMAP)bmp->GetSafeHandle();, 0, tbmp.bmHeight, pbyBuf , &bi, DIB_RGB_COLORS))
{
delete [] pbyBuf ;
pbyBuf = NULL;
}
//至于显示你可以用显示bmp的方法显示,因为你已经得到bmp对象了
也可以用
pIPicture->Render(.....);这个函数
展开全部
使用IPicture接口,可以加载,如果想获取图像数据,用IPicture接口把图像输出到内存dc中,通过内存dc就可以获取图像数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
atl中有个CImage类(#include <atlimage.h>),使用Load函数载入图片,得到一个HBITMAP句柄,如果是基于对话框的程序,添加个CStatic控件,设置显示图片,然后SetBitmap就能显示了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询