工控编程吧
标题:
125上位机VC MFC将JPG PNG GIF图片转换为位图
[打印本页]
作者:
qq263946146
时间:
2015-12-27 22:04
标题:
125上位机VC MFC将JPG PNG GIF图片转换为位图
(, 下载次数: 0)
上传
点击文件名下载附件
125上位机VC MFC将JPG PNG GIF图片转换为位图
功能展示
图片格式的转换是时常用到的功能,VC中并没有直接封装功能控件给我们使用,我们得自己动手实现转换功能,位图是我们编程时极为常用的图片格式,日常常用的JPG png等格式图片转为位图呢? 我们当前例程实现这一功能,效果如图;
要点提示
通过微软的GDI+能够快速轻松实现将JPG PNG GIF格式图片转换为位图;
GDI+使用前,得下载微软的GDIPLUS支持包,可从微软的管网下载,我们这里给大家进行了打包;
然后是添加头文件再进行简单的初始化操作,在CWinApp派生类的InitInstance函数中进行此项工作是最好的;
实现功能
1.新建基于对话框的应用程序
2.使用前准备GDI+:将例程根目录Include文件夹复制到自己工程根目录。
在StdAfx.h头文件包含GDI+ 头文件及库文件//使用GDI+第一步
#define UNICODE
#ifndef ULONG_PTR
#define ULONG_PTR unsigned long*
#endif
#include "Include/gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "Include/gdiplus.lib")
在APP类的InitInstance()中进行初始化
//使用GDI+第二步
GdiplusStartupInputgdiplusStartupInput; ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken,&gdiplusStartupInput, NULL);
在程序退出时 进行GDI+ 环境的关闭
//使用GDI+第三步 GdiplusShutdown(gdiplusToken); //关闭gdiplus的环境
3,准备好GDI+后,便是使用GDI+ 加载图片,然后实现将打开的图片保存为位图格式功能;
拖拽一编辑框ID为IDC_EDIT1,拖拽两按钮控件<加载图片><保存为位图>用于打开图片与保存为位图功能;
拖拽一图片控件ID改为IDC_RECT,用于显示打开的图片;
4.最后就是加载图片与保存为位图按钮的实现函数
void CGkbc8Dlg::OnLoadbmp()
{
CFileDialog dlg(TRUE,"bmp","工控编程吧",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"jpg文件(*.jpg)|*.jpg|png文件(*.png)|*.png|gif文件(*.gif)|*.gif|bmp文件(*.bmp)|*.bmp||",NULL);
if(IDOK==dlg.DoModal())
{
SetDlgItemText(IDC_EDIT1,dlg.GetPathName());//显示图片的全路径
BitmapbmBitmap(dlg.GetPathName().AllocSysString());//创建位图
CDC*pDC=GetDlgItem(IDC_RECT)->GetDC();//获取控件DC
Graphicsg(pDC->m_hDC);//创建绘图对像
g.DrawImage(&bmBitmap,0,0) ;//绘制位图
GetDlgItem(IDC_RECT)->ReleaseDC(pDC);//释放DC;
}
}
void CGkbc8Dlg::OnSave()
{
CFileDialog dlg(FALSE,"jpg","工控编程吧",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"bmp文件(*.bmp)|*.bmp||",this);
if(IDOK==dlg.DoModal())
{
//设置编码方式
CLSID clsid;
GetEnCoderClsid(L"image/bmp", &clsid);
//设置编码参数
ULONG encoderQuality = 50; //压缩比例
EncoderParameters encoderParameters;
encoderParameters.Count = 1;
encoderParameters.Parameter[0].Guid = EncoderQuality;
encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues = 1;
encoderParameters.Parameter[0].Value = &encoderQuality;
CString sPath;
GetDlgItemText(IDC_EDIT1,sPath);//获取要转换的位图路径
Bitmap Bitmap(sPath.AllocSysString());
Status status = Bitmap.Save(dlg.GetPathName().AllocSysString(), &clsid, &encoderParameters);
if(status != Ok)
MessageBox("图片转换失败!", "提示", MB_OK|MB_ICONWARNING);
}
}
复制代码
其中GetEnCoderClsid()为 自定义函数用于获得图片编码
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/88eaa2bbf72d0b16d232bc0b66d7d089/0/0/w_19rt7si74d.swf-albumId=5098634209-tvId=5098634209-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4