using System;using System.Collections.Generic;using System.Text;using System.Drawing;using System.Drawing.Imaging;using System.Collections;using System.IO;using System.Drawing.Drawing2D;namespace Tif...{ class TifEdit ...{ //用白色擦除 /**//// <summary> /// 白色擦除 /// </summary> /// <param name="bmp">图片文件</param> /// <param name="p0">擦除区域的左上角坐标</param> /// <param name="p1">擦除区域的又下角坐标</param> /// <param name="RectColor">橡皮的颜色</param> /// <returns>返回修改后的位图文件</returns> public static Bitmap FillRectangleInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor) ...{ if (bmp == null) return null; Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(RectColor); // g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.FillRectangle(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.Dispose(); return bmp; } //画线 /**//// <summary> /// 画直线 /// </summary> /// <param name="bmp">图片文件</param> /// <param name="p0">直线的起始坐标</param> /// <param name="p1">直线的终止坐标</param> /// <param name="LineColor">直线的颜色</param> /// <param name="LineWidth">直线的宽度</param> /// <param name="ds">直线的样式</param> /// <returns></returns> public static Bitmap DrawLineInPicture(Bitmap bmp, Point p0, Point p1, Color LineColor, int LineWidth, DashStyle ds) ...{ if (bmp == null) return null; if (p0.X == p1.X || p0.Y == p1.Y) return bmp; Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(LineColor); Pen pen = new Pen(brush, LineWidth); //pen.Alignment = PenAlignment.Inset; pen.DashStyle = ds; g.DrawLine(pen,p0,p1); g.Dispose(); return bmp; } //画矩形 /**//// <summary> /// 画矩形 /// </summary> /// <param name="bmp">图片文件</param> /// <param name="p0">矩形的左上角坐标</param> /// <param name="p1">矩形的右下角坐标</param> /// <param name="RectColor">矩形边框的颜色</param> /// <param name="LineWidth">矩形边框的宽度</param> /// <param name="ds">矩形边框的样式</param> /// <returns></returns> public static Bitmap DrawRectangleInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor, int LineWidth,DashStyle ds) ...{ if (bmp == null) return null; Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(RectColor); Pen pen = new Pen(brush, LineWidth); pen.DashStyle = ds; g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.Dispose(); return bmp; } //合并TIF /**//// <summary> /// 多个TIF文件的合并保存 /// </summary> /// <param name="imageFiles">要合并的图象文件路径数组</param> /// <param name="outFile">输出图象文件的路径</param> /// <param name="compressEncoder">文件保存的编码方式</param> public static void JoinTiffImages(ArrayList imageFiles, string outFile, EncoderValue compressEncoder) ...{ try ...{ //If only one page in the collection, copy it directly to the target file. if (imageFiles.Count == 1) ...{ File.Copy((string)imageFiles[0], outFile, true); return; } //use the save encoder System.Drawing.Imaging.Encoder enc = System.Drawing.Imaging.Encoder.SaveFlag; EncoderParameters ep = new EncoderParameters(2); ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.MultiFrame); ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)compressEncoder); Bitmap pages = null; int frame = 0; ImageCodecInfo info = GetEncoderInfo("image/tiff"); foreach (string strImageFile in imageFiles) ...{ if (frame == 0) ...{ pages = (Bitmap)Image.FromFile(strImageFile); //save the first frame pages.Save(outFile, info, ep); } else ...{ //save the intermediate frames ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.FrameDimensionPage); Bitmap bm = (Bitmap)Image.FromFile(strImageFile); pages.SaveAdd(bm, ep); bm.Dispose(); } if (frame == imageFiles.Count - 1) ...{ //flush and close. ep.Param[0] = new EncoderParameter(enc, (long)EncoderValue.Flush); pages.SaveAdd(ep); } frame++; } } catch (Exception ex) ...{ #if DEBUG Console.WriteLine(ex.Message); #endif throw; } return; } private static ImageCodecInfo GetEncoderInfo(String mimeType) ...{ int j; ImageCodecInfo[] encoders; encoders = ImageCodecInfo.GetImageEncoders(); for (j = 0; j < encoders.Length; ++j) ...{ if (encoders[j].MimeType == mimeType) return encoders[j]; } return null; } //合并Tiff /**//// <summary> /// 多个TIF文件的合并保存 /// </summary> /// <param name="imageFiles">要合并的图象文件路径数组</param> /// <param name="outFile">输出图象文件的路径</param> /// <param name="compressEncoder">文件保存的编码方式</param> public static void JoinTiffZJ(ArrayList imageArray, string outFile, EncoderValue compressEncoder) ...{ if (imageArray.Count == 1) ...{ File.Copy((string)imageArray[0], outFile, true); return; } Bitmap multi=null; ImageCodecInfo myImageCodecInfo; System.Drawing.Imaging.Encoder myEncoder; EncoderParameter myEncoderParameter; EncoderParameters myEncoderParameters; // Get an ImageCodecInfo object that represents the TIFF codec. myImageCodecInfo = GetEncoderInfo("image/tiff"); // Create an Encoder object based on the GUID // for the SaveFlag parameter category. myEncoder = System.Drawing.Imaging.Encoder.SaveFlag; // Create an EncoderParameters object. // An EncoderParameters object has an array of EncoderParameter // objects. In this case, there is only one // EncoderParameter object in the array. myEncoderParameters = new EncoderParameters(1); // Save the first page (frame).保存第一帧 for (int i = 0; i < imageArray.Count; i++) ...{ if (i == 0) ...{ multi = new Bitmap(Image.FromFile((string)imageArray[i])); myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.MultiFrame); myEncoderParameters.Param[0] = myEncoderParameter; multi.Save(outFile, myImageCodecInfo, myEncoderParameters); } else ...{ // Save the second page (frame). Bitmap page2 = new Bitmap(Image.FromFile((string)imageArray[i])); myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.FrameDimensionPage); myEncoderParameters.Param[0] = myEncoderParameter; multi.SaveAdd(page2, myEncoderParameters); } //关闭文件 if (i == imageArray.Count - 1) ...{ myEncoderParameter = new EncoderParameter(myEncoder, (long)EncoderValue.Flush); myEncoderParameters.Param[0] = myEncoderParameter; multi.SaveAdd(myEncoderParameters); } } } //写字 /**//// <summary> /// 在图片上绘制文字 /// </summary> /// <param name="b">图片文件</param> /// <param name="txt">绘制的文字内容</param> /// <param name="font">文字的字体信息</param> /// <param name="c">文字的颜色</param> /// <param name="x">文字绘制位置的x坐标</param> /// <param name="y">文字绘制位置的y坐标</param> /// <returns></returns> public static Bitmap KiSetText(Bitmap b, string txt, Font font, Color c, int x, int y) ...{ if (b == null) ...{ return null; } Graphics g = Graphics.FromImage(b); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; SolidBrush sb = new SolidBrush(c); g.DrawString(txt, font, sb, new PointF(x, y)); g.Dispose(); return b; } //画圈 /**//// <summary> /// 画圈 /// </summary> /// <param name="bmp">图片文件</param> /// <param name="p0">圈的左上角坐标</param> /// <param name="p1">圈的右下角坐标</param> /// <param name="RectColor">圈的边框的颜色</param> /// <param name="LineWidth">圈的边框的宽度</param> /// <param name="ds">圈的边框的样式</param> /// <returns></returns> public static Bitmap DrawRoundInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor, int LineWidth, DashStyle ds) ...{ if (bmp == null) return null; Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(RectColor); Pen pen = new Pen(brush, LineWidth); pen.DashStyle = ds; g.DrawEllipse(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.Dispose(); return bmp; } //填充的圈 /**//// <summary> /// 画实心圈 /// </summary> /// <param name="bmp">图片文件</param> /// <param name="p0">圈的左上角坐标</param> /// <param name="p1">圈的右下脚坐标</param> /// <param name="RectColor">圈的颜色</param> /// <returns></returns> public static Bitmap FillEllipseInPicture(Bitmap bmp, Point p0, Point p1, Color RectColor) ...{ if (bmp == null) return null; Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(RectColor); // g.DrawRectangle(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); // g.FillRectangle(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.FillEllipse(brush, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.Dispose(); return bmp; } //画路径 /**//// <summary> ///跟随鼠标画曲线 /// </summary> /// <param name="bmp">图片文件</param> /// <param name="graphPath">线的路径</param> /// <param name="RectColor">线的颜色</param> /// <param name="LineWidth">线的宽度</param> /// <param name="ds">线的样式</param> /// <returns></returns> public static Bitmap DrawPathInPicture(Bitmap bmp, GraphicsPath graphPath, Color RectColor, int LineWidth, DashStyle ds) ...{ if (bmp == null) return null; Graphics g = Graphics.FromImage(bmp); Brush brush = new SolidBrush(RectColor); Pen pen = new Pen(brush, LineWidth); pen.DashStyle = ds; //g.DrawEllipse(pen, new Rectangle(p0.X, p0.Y, Math.Abs(p0.X - p1.X), Math.Abs(p0.Y - p1.Y))); g.DrawPath(pen, graphPath); g.Dispose(); return bmp; } }}