QQ登录

只需一步,快速开始

137上位机VC MFC图片添加水印功能

[ 复制链接 ]

137上位机VC MFC图片添加水印功能

137上位机VC MFC图片添加水印功能

137上位机VC MFC图片添加水印功能


功能展示

给图片添加水印是比较常见的现象,我们在网络上查找图片时,经常会看到图片上的版权文字,我们当前例程实现给JPG等常见格式图片添加水印功能,效果如图;
要点提示
当前例程也是通过微软的GDI+ 图形库实现;库的使用我们在前面例程中已详细介绍使用的三个步骤;
这里我们通过Graphics类的DrawImage(), DrawString()实现图片的水印效果,然后通过Save()保存合成的图片到硬盘上;





实现功能
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_PATH;
添加编辑框控件,用于输入水印文字,ID改为IDC_EDIT1;


4.实现打开图片,添加水印功能,函数体为
  1. void CGkbc8Dlg::OnOpen()
  2. {
  3.         CFileDialog Dlg(TRUE, "", "", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  4.                                 "图像文件|*.bmp;*.jpg;*.jpeg||");
  5.         if (Dlg.DoModal()==IDOK)                //打开文件对话框
  6.         {
  7.                 m_Strextend = Dlg.GetFileExt();
  8.                 m_FileName  = Dlg.GetFileName();
  9.                 SetDlgItemText(IDC_PATH,Dlg.GetPathName() );
  10.         }
  11. }
  12. void CGkbc8Dlg::OnAdd()
  13. {
  14.         CString sPath("");
  15.         CString sMarkText;
  16.         GetDlgItemText(IDC_PATH,sPath);
  17.         if(!sPath.IsEmpty()) //已打开图片
  18.         {
  19.                 GetDlgItemText(IDC_EDIT1,sMarkText);//水印文字
  20.                 PointF ptf(0,0);                  //水印文字的起始位图坐标

  21.                 LOGFONT lf;  
  22.                 ::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT), sizeof(lf), &lf);  
  23.                 memcpy(lf.lfFaceName, "Arial", 5) ;  
  24.                 lf.lfHeight = 48 ;  
  25.                 Font       font(GetDC()->m_hDC, &lf); //水印文字字体
  26.                 SolidBrush brush(Color(255, 255, 0, 0)); //水印文字画刷
  27.                 int nLen = MultiByteToWideChar(CP_ACP, 0, sMarkText, -1, NULL, 0);//水印字符长度
  28.                
复制代码
  1.   if (m_Strextend == "jpg"||m_Strextend == "jpeg" || m_Strextend == "bmp")        
  2.                 {
  3.                         Bitmap *pBmp = Bitmap::FromFile(sPath.AllocSysString());
  4.                         sPath.ReleaseBuffer();
  5.                         if(pBmp)
  6.                         {
  7.                                 Graphics *pGraph = Graphics::FromImage(pBmp);
  8.                                 pGraph->DrawImage(pBmp, 0, 0, pBmp->GetWidth(), pBmp->GetHeight());
  9.                                 pGraph->DrawString(sMarkText.AllocSysString(), nLen, &font, ptf, &brush);
  10.                                 sMarkText.ReleaseBuffer();
  11.                                 //<>
  12.                                 int pos = sPath.ReverseFind('\\');
  13.                                 char chName[MAX_PATH] = {0};
  14.                                 sPath = sPath.Left(pos);
  15.                                 sPath += "\\工控编程吧";
  16.                                 int nRlt = CreateDirectory(sPath, NULL);//新建目录
  17.                                 //<>
  18.                                 CLSID clsid;
  19.                                 GetCodecClsid(L"image/jpeg", &clsid);
  20.                                 
  21.                                 int nQuality = 95;
  22.                                 EncoderParameters Encoders;
  23.                                 Encoders.Count = 1;
  24.                                 Encoders.Parameter[0].Guid = EncoderQuality;
  25.                                 Encoders.Parameter[0].Type = EncoderParameterValueTypeLong;
  26.                                 Encoders.Parameter[0].NumberOfValues = 1;
  27.                                 Encoders.Parameter[0].Value = &nQuality;
  28.                                 
  29.                                 sPath += '\\'; sPath += m_FileName;
  30.                                 pBmp->Save(sPath.AllocSysString(), &clsid, &Encoders);
  31.                                 sPath.ReleaseBuffer();
  32.                                 delete pBmp;
  33.                         }               
  34.                 }
  35.         }
复制代码
}其中GetCodecClsid ()为 自定义函数用于获得图片编码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:137.上位机VC MFC图片添加水印功能.rar 
文件大小:1017.06 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索