多种图像格式相互转换工具的开发(附源代码)

  在开发井口装置绘制软件过程中,需要将矢量图形进行有序摆放,由于多数采用WMF或EMF图元文件格式,结合WMF和EMF的发展情况,确定采用EMF格式。但开发过程中遇到一些WMF格式文件,需要处理成EMF格式。利用万能的网络进行搜索,发现试用软件都带有水印,存在种种限制,GitHub、Codeproject、CodeGuru中的MetaFile类也都没有合适的工具。

  通过一天的研究,可以充分利用C#本身的强大功能,开发一个小巧的图像格式转换工具(存在GDI+一般性错误,不影响使用)。本工具支持BMP、EMF、WMF、GIF、JPG、PNG、TIFF、ICO八种格式的相互转换,尤其针对WMF和EMF图元文件的转换,填补了网上缺少相关工具的实际情况。

  

 

  WMF转EMF如下:

     

 

 源代码如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 using System.Drawing.Imaging;
 10 using System.IO;
 11 using System.Runtime.InteropServices;
 12 
 13 namespace imageConverter
 14 {
 15     public partial class Form1 : Form
 16     {
 17         string srcFile = "";
 18         string dstFile = "";
 19         int nIndex = 0;
 20         string strFormat;
 21         public Form1()
 22         {
 23             InitializeComponent();
 24         }
 25 
 26         // Load the images.
 27         private void Form1_Load(object sender, EventArgs e)
 28         {
 29             lblFileName.Text = System.IO.Directory.GetCurrentDirectory();
 30             cmbFormat.SelectedIndex = 0;
 31         }
 32 
 33         private void btnOpen_Click(object sender, EventArgs e)
 34         {
 35             openFileDialog1.InitialDirectory = System.IO.Directory.GetCurrentDirectory();
 36             openFileDialog1.Filter = "所有文件|*.*|位图文件|*.Bmp|增强图元文件|*.Emf|图元文件|*.Wmf|Gif格式图像|*.Gif|Jpeg格式图像|*.Jpeg|Png格式图像|*.Png|Tiff格式图像|*.Tiff|图标文件|*.Ico";
 37             openFileDialog1.RestoreDirectory = true;
 38             openFileDialog1.FilterIndex = 1;
 39             if (openFileDialog1.ShowDialog() == DialogResult.OK)
 40             {
 41                 srcFile = openFileDialog1.FileName;
 42                 lblFileName.Text = srcFile;
 43                 picImage.Image = new Bitmap(srcFile);
 44             }
 45         }
 46 
 47         private void cmbFormat_SelectedIndexChanged(object sender, EventArgs e)
 48         {
 49             nIndex = cmbFormat.SelectedIndex;
 50             if (nIndex >= 0)
 51             {
 52                 btnConvert.Enabled = true;
 53                 strFormat = "." + cmbFormat.Text;
 54             }
 55             else
 56             {
 57                 btnConvert.Enabled = false;
 58                 strFormat = "";
 59             }
 60         }
 61         private static ImageFormat GetImageFormat(int nSel)
 62         {
 63             switch (nSel)
 64             {
 65                 case 0:
 66                     return ImageFormat.Bmp;
 67                 case 1:
 68                     return ImageFormat.Emf;
 69                 case 2:
 70                     return ImageFormat.Wmf;
 71                 case 3:
 72                     return ImageFormat.Gif;
 73                 case 4:
 74                     return ImageFormat.Jpeg;
 75                 case 5:
 76                     return ImageFormat.Png;
 77                 case 6:
 78                     return ImageFormat.Tiff;
 79                 case 7:
 80                     return ImageFormat.Icon;
 81                 default:
 82                     throw new NotImplementedException();
 83             }
 84         }
 85 
 86         private void btnConvert_Click(object sender, EventArgs e)
 87         {
 88             using (Image img = Image.FromFile(srcFile))
 89             {
 90                 System.IO.FileInfo fi = new System.IO.FileInfo(srcFile);
 91                 saveFileDialog1.InitialDirectory = fi.DirectoryName;
 92                 saveFileDialog1.Filter = "位图文件|*.Bmp|增强图元文件|*.Emf|图元文件|*.Wmf|Gif格式图像|*.Gif|Jpeg格式图像|*.Jpeg|Png格式图像|*.Png|Tiff格式图像|*.Tiff|图标文件|*.Ico|所有文件|*.*";
 93                 saveFileDialog1.RestoreDirectory = true;
 94                 saveFileDialog1.FilterIndex = nIndex + 1;
 95                 saveFileDialog1.FileName = System.IO.Path.GetFileNameWithoutExtension(fi.Name);
 96                 if (saveFileDialog1.ShowDialog() == DialogResult.OK)
 97                 {
 98                     dstFile = saveFileDialog1.FileName;
 99                     lblDstFilename.Text = dstFile;
100                     if ((GetImageFormat(nIndex) == ImageFormat.Emf) || (GetImageFormat(nIndex) == ImageFormat.Wmf))
101                     {
102                         var g = picMetafile.CreateGraphics();
103                         var img0 = new Metafile(dstFile, g.GetHdc());
104                         var ig = Graphics.FromImage(img0);
105                         ig.DrawImage(img, 0, 0);
106                         ig.Dispose(); img0.Dispose(); g.ReleaseHdc(); g.Dispose();
107                     }
108                     else
109                     {
110                         img.Save(dstFile, GetImageFormat(nIndex));
111                     }
112                     picMetafile.Image = Image.FromFile(dstFile);
113                     img.Dispose();
114                     saveFileDialog1.Dispose();
115                 }
116             }
117         }
118     }
119 }

 

下载链接:https://files.cnblogs.com/files/gqzxm/imageConverter.rar

 

posted @ 2021-09-16 22:50  智能油气田ing  阅读(676)  评论(0编辑  收藏  举报