mfc编程如何设置用图片控件动态显示jpg图像。
2个回答
展开全部
jpg显示的步骤:
1。打开图片控件的绘图DC。2。使用OleLoadPicture函数读取jpg图像到内存中。(导入olepro32.dll)
3。向DC上绘制图像
示例如下:
CDC *pDC = GetDlgItem(IDC_STATIC_IMG)->GetDC(); //获取控件DC
HDC hDC = (HDC)pDC;
HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);//从指定的路径szImagePath中读取文件句柄
DWORD dwFileSize=GetFileSize(hFile, NULL); //获得图片文件的大小,用来分配全局内存
HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //给图片分配全局内存
void *pImageMemory=GlobalLock(hImageMemory); //锁定内存
DWORD dwReadedSize; //保存实际读取的文件大小
ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //读取图片到全局内存当中
GlobalUnlock(hImageMemory); //解锁内存
CloseHandle(hFile); //关闭文件句柄
IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
CreateStreamOnHGlobal(hImageMemory, false, &pIStream); //用全局内存初使化IStream接口指针
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
//得到IPicture COM接口对象后,你就可以进行获得图片信息、显示图片等操作
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,100,100,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上绘出图片
GlobalFree(hImageMemory); //释放全局内存
pIStream->Release(); //释放pIStream
pIPicture->Release(); //释放pIPicture
ReleaseDC(pDC);
展开全部
用opencv显示图像。
//opencv头文件
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "ml.h"
#include "cvaux.h"
#include "cvcam.h"
//显示图片函数
void ShowPic(char *lpstrFile, UINT ID)
{
CDC *pDC = GetDlgItem(ID)->GetDC();
HDC hDC= pDC->m_hDC;
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage MyImage;
IplImage *image=NULL;
if(image) cvReleaseImage(&image);
image = cvLoadImage(lpstrFile,1);
MyImage.CopyOf(image);
MyImage.DrawToHDC(hDC,&rect);
if(image) cvReleaseImage(&image);
ReleaseDC(pDC);
}
//opencv头文件
#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include "ml.h"
#include "cvaux.h"
#include "cvcam.h"
//显示图片函数
void ShowPic(char *lpstrFile, UINT ID)
{
CDC *pDC = GetDlgItem(ID)->GetDC();
HDC hDC= pDC->m_hDC;
CRect rect;
GetDlgItem(ID)->GetClientRect(&rect);
CvvImage MyImage;
IplImage *image=NULL;
if(image) cvReleaseImage(&image);
image = cvLoadImage(lpstrFile,1);
MyImage.CopyOf(image);
MyImage.DrawToHDC(hDC,&rect);
if(image) cvReleaseImage(&image);
ReleaseDC(pDC);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询