using System;
using System.Drawing;using System.Drawing.Imaging;using System.Drawing.Drawing2D;using System.IO;namespace Framework
{ public class ImageClass{ public Image ResourceImage; public int Width=0; public int Height=0; private int ImageWidth; private int ImageHeight; private ImageFormat imgFormat; public string ErrMessage;public ImageClass(string ImageFileName)
{ ResourceImage = Image.FromFile(ImageFileName); Width = ResourceImage.Width; Height = ResourceImage.Height; imgFormat = ResourceImage.RawFormat; ErrMessage = ""; } public ImageClass(byte[] Img) { MemoryStream imgStream = new MemoryStream(Img); try { ResourceImage = System.Drawing.Image.FromStream(imgStream); Width = ResourceImage.Width; Height = ResourceImage.Height; imgFormat = ResourceImage.RawFormat; } catch (Exception ex) { ErrMessage = ex.ToString(); } }public bool ThumbnailCallback()
{ return false; }public Image GetReducedImage(int Width, int Height)
{ try { Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
return ReducedImage;
} catch (Exception e) { ErrMessage = e.Message; return null; } } public bool GetReducedImage(int Width, int Height, string targetFilePath) { try { EncoderParameter p; EncoderParameters ps;ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p;Image ReducedImage;
Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ReducedImage = ResourceImage.GetThumbnailImage(Width, Height, callb, IntPtr.Zero);
Graphics g = System.Drawing.Graphics.FromImage(ReducedImage); // 设置画布的描绘质量 g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic;//清空画布并以透明背景色填充
g.Clear(Color.Transparent);g.DrawImage(ResourceImage, new Rectangle(0, 0, Width, Height), new Rectangle(0, 0, ResourceImage.Width, ResourceImage.Height), GraphicsUnit.Pixel);
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{ ReducedImage.Save(targetFilePath, imgFormat); } else { ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps); }ReducedImage.Dispose();
g.Dispose();return true;
} catch (Exception e) { ErrMessage = e.Message; return false; } }public Image GetReducedImage(double Percent)
{ try { Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
ImageHeight = Convert.ToInt32(ResourceImage.Height * Percent);ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
return ReducedImage;
} catch (Exception e) { ErrMessage = e.Message; return null; } }public bool GetReducedImage(double Percent, string targetFilePath)
{ try { EncoderParameter p; EncoderParameters ps;ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L);
ps.Param[0] = p; Image ReducedImage;Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
ImageHeight = Convert.ToInt32(ResourceImage.Height * Percent);ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic;//清空画布并以透明背景色填充
g.Clear(Color.Transparent);g.DrawImage(ResourceImage, new Rectangle(0, 0, ImageWidth, ImageHeight), new Rectangle(0, 0, ResourceImage.Width, ResourceImage.Height), GraphicsUnit.Pixel);
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{ ReducedImage.Save(targetFilePath, imgFormat); } else { ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps); }ReducedImage.Dispose();
g.Dispose();return true;
} catch (Exception e) { ErrMessage = e.Message; return false; } }public bool GetReducedImage(string targetFilePath)
{ try { ResourceImage.Save(targetFilePath, ImageHelper.GetFormat(targetFilePath));return true;
} catch (Exception e) { ErrMessage = e.Message; return false; } } public bool CaptureImg(string targetFilePath, int width, int height, int spaceX, int spaceY) { try { //载入底图 int x = 0; //截取X坐标 int y = 0; //截取Y坐标 //原图宽与生成图片宽 之差 //当小于0(即原图宽小于要生成的图)时,新图宽度为较小者 即原图宽度 X坐标则为0 //当大于0(即原图宽大于要生成的图)时,新图宽度为设置值 即width X坐标则为 sX与spaceX之间较小者 //Y方向同理 int sX = ResourceImage.Width - width; int sY = ResourceImage.Height - height; if (sX > 0) { x = sX > spaceX ? spaceX : sX; } else { width = ResourceImage.Width; } if (sY > 0) { y = sY > spaceY ? spaceY : sY; } else { height = ResourceImage.Height; }EncoderParameter p;
EncoderParameters ps;ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L); ps.Param[0] = p;Bitmap ReducedImage = new Bitmap(width, height);
Graphics g = System.Drawing.Graphics.FromImage(ReducedImage);// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic;//清空画布并以透明背景色填充
g.Clear(Color.Transparent);g.DrawImage(ResourceImage, 0, 0, new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());
if (imgCodecInfo == null)
{ ReducedImage.Save(targetFilePath, imgFormat); } else { ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps); }//释放资源
//saveImage.Dispose(); ReducedImage.Dispose(); g.Dispose(); } catch (Exception ex) { ErrMessage = ex.Message; return false; } return true; }public bool MergerImg(string targetFilePath, int ImgWidth, int ImgHeight)
{ try { EncoderParameter p; EncoderParameters ps;ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L); ps.Param[0] = p;//创建要显示的图片对象,根据参数的个数设置宽度
Bitmap ReducedImage = new Bitmap(ImgWidth, ImgHeight); Graphics g = Graphics.FromImage(ReducedImage);// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic;//清空画布并以透明背景色填充
g.Clear(Color.Transparent);int StartX = (ImgWidth - this.Width) / 2;
int StartY = (ImgHeight - this.Height) / 2;g.DrawImage(ResourceImage, StartX, StartY, this.Width, this.Height);
//保存图象
ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString()); if (imgCodecInfo == null) { ReducedImage.Save(targetFilePath, imgFormat); } else { ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps); }//释放资源
ReducedImage.Dispose(); g.Dispose(); } catch (Exception ex) { ErrMessage = ex.Message; return false; } return true; }public bool MergerImg(string targetFilePath, System.Drawing.Image image, int ImgWidth, int ImgHeight)
{ try { EncoderParameter p; EncoderParameters ps;ps = new EncoderParameters(1);
p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 85L); ps.Param[0] = p;//创建要显示的图片对象,根据参数的个数设置宽度
Bitmap ReducedImage = new Bitmap(ImgWidth, ImgHeight); Graphics g = Graphics.FromImage(ReducedImage);// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic;//清空画布并以透明背景色填充
g.Clear(Color.Transparent);int StartX = (ImgWidth - image.Width) / 2;
int StartY = (ImgHeight - image.Height) / 2;g.DrawImage(image, StartX, StartY, image.Width, image.Height);
//保存图象 ImageCodecInfo imgCodecInfo = GetCodecInfo(imgFormat.ToString());if (imgCodecInfo == null)
{ ReducedImage.Save(targetFilePath, imgFormat); } else { ReducedImage.Save(targetFilePath, GetCodecInfo(targetFilePath), ps); }//释放资源
ReducedImage.Dispose(); g.Dispose(); } catch (Exception ex) { ErrMessage = ex.Message; return false; } return true; }//返回图片解码器信息用于jpg图片
private ImageCodecInfo GetCodecInfo(string str) { string ext = str.Substring(str.LastIndexOf(".") + 1); string mimeType = ""; switch (ext.ToLower()) { case "jpe": case "jpg": case "jpeg": mimeType = "image/jpeg"; break; case "bmp": mimeType = "image/bmp"; break; case "png": mimeType = "image/png"; break; case "tif": case "tiff": mimeType = "image/tiff"; break; default: mimeType = "image/jpeg"; break; } ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo ici in CodecInfo) { if (ici.MimeType == mimeType) return ici; } return null; }public void Dispose()
{ ResourceImage.Dispose(); }}}
因为tiff格式的图片,一张可以有多页,所以现在有需求如下:
1. 可以随便添加一张图片(tiff,jpeg,png等格式)的图片到指定的tiff图片中去
2. 可以从tiff图片中抽取出任意张图片出来,可以保存为(tiff,png,jpeg等格式)
1 Image img = Image.FromFile("C:\\1.tif"); 2 Guid guid = (Guid)img.FrameDimensionsList.GetValue(0); 3 FrameDimension dimension = new FrameDimension(guid); 4 int totalPage = img.GetFrameCount(dimension); 5 6 this.statusBar1.Text = "共"+totalPage+"页"; 7 8 for(int i=0;i<totalPage;i++) 9 { 10 img.SelectActiveFrame(dimension,i); 11 img.Save("C:\\Gif"+i+".gif",System.Drawing.Imaging.ImageFormat.Gif); 12 } 13