MFC中基础控件的使用之Picture Control
2017-03-25 19:03
417 查看
Picture Control的作用就是显示图片或者显示视频
在这里我主要通过一个例子:打开任一格式的图片将其显示在控件中 介绍其用法,这里面也顺便介绍了读取图片像素的方法。
如何在控件中播放视频请看这篇片博文:http://blog.csdn.net/starrain2016/article/details/65660410
一、添加一些必要的文件及环境
配置为:GDI+环境
二、实现
在这里我主要通过一个例子:打开任一格式的图片将其显示在控件中 介绍其用法,这里面也顺便介绍了读取图片像素的方法。
如何在控件中播放视频请看这篇片博文:http://blog.csdn.net/starrain2016/article/details/65660410
一、添加一些必要的文件及环境
配置为:GDI+环境
#include "Dib.h" #include "atlbase.h" #include "atlimage.h" typedef struct ColorImageMes { RGBQUAD** BYImageData; //彩色图像像素数据 double** DOImageData; _In_ int Height; //图像高 _In_ int Width; //图像宽 } ColorimageMes;
二、实现
/******************************************************************************************* * 功能: 打开某文件夹下的任一格式图片并显示在Picture中 *pStaic:方法:(CStatic*)GetDlgItem(IDC) **:status:finfish *******************************************************************************************/ ColorImageMes ImageObject::OpenEitherFormatImagePictureShow(CStatic *pStaic) { CString strPath; CFileDialog dlg(TRUE, NULL, NULL, OFN_NOCHANGEDIR, _T("JPEG/BMP/GIF(*.jpg;*.jpeg;*.bmp;*.gif)|*.jpg;*.jpeg;*.bmp;*.gif|"));//加载图片 int iReturn = dlg.DoModal(); if (iReturn == IDOK) { int nCount = 0; strPath = dlg.GetPathName(); //获取该图片的路径及名称 ShowEitherFormatPicture(strPath,pStaic); //显示 } return GetImagePixel(strPath); //获取该图片的像素值 } /************************************************************************************ 加载某路径下的任意格式图片并显示在控件中 *pathfile:为待显示的文件路径 PStaic:方法:(CStatic*)GetDlgItem(IDC) *:status:finfish ************************************************************************************/ void ImageObject::ShowEitherFormatPicture(CString &pathfile, CStatic *pStaic) { HBITMAP bitmap; CRect rect; //获得控件的大小 pStaic->GetClientRect(&rect); int rcWidth = rect.right - rect.left; //通过控件的坐标计算其大小 int rcHeight = rect.bottom - rect.top; bitmap = LoadALLPIC(pathfile.GetBuffer(0), rcWidth, rcHeight); //加载图片数据 pStaic->ModifyStyle(0xF, SS_BITMAP | SS_CENTERIMAGE); pStaic->SetBitmap(bitmap); //显示 } HBITMAP ImageObject::LoadALLPIC(TCHAR * strFileName, int width, int heigh)//加载图片数据 { IPicture* p = NULL; IStream* s = NULL; HGLOBAL hG; void* pp; FILE* fp; // Read file in memory //_wfopen_s(&fp, strFileName, _T("rb"));//Uunicode编码 fp=fopen(strFileName,_T("rb"));//多字节编码 if (!fp) return NULL; fseek(fp, 0, SEEK_END); int fs = ftell(fp); fseek(fp, 0, SEEK_SET); hG = GlobalAlloc(GPTR, fs); if (!hG) { fclose(fp); return NULL; } pp = (void*)hG; fread(pp, 1, fs, fp); fclose(fp); CreateStreamOnHGlobal(hG, false, &s); if (!s) { GlobalFree(hG); return NULL; } OleLoadPicture(s, 0, false, IID_IPicture, (void**)&p); if (!p) { s->Release(); GlobalFree(hG); return NULL; } s->Release(); GlobalFree(hG); HBITMAP hB = 0; p->get_Handle((unsigned int*)&hB); HBITMAP hBB = (HBITMAP)CopyImage(hB, IMAGE_BITMAP, width, heigh, LR_COPYRETURNORG); //拷贝图象信息,并将其缩放成控件大小 p->Release(); return hBB; } /*********************************************************************************** //读原图的数据 *Strfile: 图像所在的路径 *ImageData:返回的图像像素 *WndWidth:返回图像的宽 *WndHeight:返回图像的高 *:status:finfish **********************************************************************************/ ColorImageMes ImageObject::GetImagePixel(CString &Strfile) { ColorImageMes Picture; USES_CONVERSION; WCHAR* pBuf = T2W((LPCTSTR)Strfile); //CString 转 WCHAR wstring infilename(pBuf); string outfilename("color.txt"); Bitmap* bmp = new Bitmap(infilename.c_str()); Picture.Height = bmp->GetHeight(); Picture.Width = bmp->GetWidth(); Color color; Picture.BYImageData = new RGBQUAD*[Picture.Height]; for (int l = 0; l < Picture.Height; l++) { Picture.BYImageData[l] = new RGBQUAD[Picture.Width]; } for (int y = 0; y < Picture.Height; y++) { for (int x = 0; x < Picture.Width; x++) { bmp->GetPixel(x, y, &color); Picture.BYImageData[y][x].rgbGreen = (int)color.GetGreen(); Picture.BYImageData[y][x].rgbRed = (int)color.GetRed(); Picture.BYImageData[y][x].rgbBlue = (int)color.GetBlue(); Picture.BYImageData[y][x].rgbReserved = 0; } } delete bmp; return Picture; }
相关文章推荐
- MFC—PictureControl控件使用,显示和处理图像
- MFC:Tab Control 控件的使用
- MFC中使用TAB Control控件(转)
- MFC Tab Control控件的详细使用
- MFC控件使用说明(combo box Button Check Box Radio Button List Control Edit Box Hot Key IP Address....)
- MFC:Tab Control 控件的使用
- 使用MFC基础控件实现真彩色的按钮
- MFC中ListControl控件的使用
- MFC:Tab Control 控件的使用
- MFC Tree Control 控件使用
- MFC:Tab Control 控件的使用
- MFC中ListControl控件的使用
- MFC的Picture控件使用
- MFC中ListControl控件的使用
- MFC中List Control控件的使用及实时显示系统时间的方法
- MFC中ListControl控件的使用
- MFC使用Tab Control(选项卡控件)方法
- MFC Tab Control控件的详细使用
- MFC:Tab Control 控件的使用
- MFC:Tab Control 控件的使用