记录一下最近工作中遇到的有关图像处理的问题。
一、使用C#进行图像的放大,缩小操作。
二、使用C#更改图像的色彩模式。
三、对图像进行输出。
使用C#进行图像的放大,缩小操作。
首先想到的应该是读取一个image再使用bitmap进行缩放处理。
Image imageInfo = Image.FromFile("文件路径");
Bitmap newImage = new Bitmap(imageInfo, 宽(像素), 高(像素));
或者是使用bitmap进行文件流处理,然后使用Graphics绘制新图像。
// An highlighted block
//通过流来获取文件信息从而获得图像的Bitmap
Stream originStream = File.OpenRead("文件路径");
Bitmap b= new Bitmap(originStream);
public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidth)
{
System.Drawing.Image imgSource = b;
System.Drawing.Imaging.ImageFormat thisFormat =imgSource.RawFormat;
Bitmap outBmp = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage(outBmp);
g.Clear(System.Drawing.Color.Transparent);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode =InterpolationMode.HighQualityBicubic;
g.DrawImage(imgSource, 0, 0, destWidth, destHeight);
g.Dispose();
return outBmp;
}
二者怎么选择?
如果单纯进行图像缩放使用第一种
如果需要进行绘图操作,比如在图片上添加描述文字则使用第二种。
g.DrawImage(imgSource, 0, 0, destWidth, destHeight);有多个重载,可通过此方法设置背景画布,笔者这个地方则没有设置背景画布大小。
二、使用C#更改图像的色彩模式。
为什么要更改图像色彩模式?
业务印刷行业需要用到CMYK 的色彩模式,而我们平时使用的RGB模式。
更改色彩模式需要用到一个库,Magick.NET-Q16-HDRI-AnyCPU。直接通过nuget即可下载。
使用这个库可以更改图片的格式,图片的色彩模式等各种参数。
// An highlighted block
MagickImage magickImage = new MagickImage("一个bitmap");
magickImage.ColorSpace = ColorSpace.CMYK;
三、对图像进行输出。
通过上面两句代码即可完成CMYK模式的转换,转换后magickImage.Write(“文件储存路径”);可直接输出CMYK模式的图片。
笔者当时遇见一个问题,将magickImage转换为bitmap之后直接对bitmap进行输出,得到的图片依旧为RGB模式,所以不建议使用bitmap进行输出。
不建议以MemoryStream的形式进行输出,太麻烦了,而且需要转为bitmap,可能输出不对。