图片类处理

1、读取图片两种方式

System.Drawing.Bitmap imgFrom = new System.Drawing.Bitmap(fromImg)

System.Drawing.Image gif = System.Drawing.Image.FromFile(fromImg);

2、把图片从一个绘制到另一个,首先要先实例化一个Bitmap(背景默认黑色)

 System.Drawing.Bitmap bmpOut = new System.Drawing.Bitmap(Width, Height);

using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmpOut))
{
g.FillRectangle(System.Drawing.Brushes.White, 0, 0, bmpOut.Width, bmpOut.Height); //填充背景颜色
g.DrawImage(imgIn, new System.Drawing.Rectangle(0, 0, Width, Height), new System.Drawing.Rectangle(0, 0, Width, Height), System.Drawing.GraphicsUnit.Pixel);
}

3、如果需要把特定颜色去掉

bmpOut .MakeTransparent(System.Drawing.Color.FromArgb(252, 252, 252)); //把该颜色设置为透明

4、图片保存后,一般会比较大,可以设置压缩

System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
long[] quality = new long[1] { 100 };
encoderParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

bmpOut.Save(fileSaveUrl, GetCodecInfo("image/gif"), encoderParams);

5、完整代码

public void Cut(System.Drawing.Bitmap imgIn, int Width, int Height, string fileSaveUrl)
{
System.Drawing.Imaging.FrameDimension fd = new System.Drawing.Imaging.FrameDimension(imgIn.FrameDimensionsList[0]);
if (imgIn.GetFrameCount(fd) > 0)
{
imgIn.SelectActiveFrame(fd, 0); //取第一帧图片
imgIn.MakeTransparent(System.Drawing.Color.FromArgb(252, 252, 252)); //把该颜色设置为透明
System.Drawing.Bitmap bmpOut = new System.Drawing.Bitmap(Width, Height);
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmpOut))
{
g.FillRectangle(System.Drawing.Brushes.White, 0, 0, bmpOut.Width, bmpOut.Height);
g.DrawImage(imgIn, new System.Drawing.Rectangle(0, 0, Width, Height), new System.Drawing.Rectangle(0, 0, Width, Height), System.Drawing.GraphicsUnit.Pixel);
}

//以下代码为保存图片时,设置压缩质量
System.Drawing.Imaging.EncoderParameters encoderParams = new System.Drawing.Imaging.EncoderParameters();
long[] quality = new long[1] { 100 };
encoderParams.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

bmpOut.Save(fileSaveUrl, GetCodecInfo("image/gif"), encoderParams);
}
}

6、获得ImageCodecInfo的两种方法

private System.Drawing.Imaging.ImageCodecInfo GetCodecInfo(string mimeType)
{
System.Drawing.Imaging.ImageCodecInfo[] CodecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
foreach (System.Drawing.Imaging.ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType)
return ici;
}
return null;
}

private ImageCodecInfo GetEncoder(ImageFormat format)
        {

            ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();

            foreach (ImageCodecInfo codec in codecs)
            {
                if (codec.FormatID == format.Guid)
                {
                    return codec;
                }
            }
            return null;
        }

posted on 2017-01-18 14:29  hongzhez  阅读(149)  评论(0编辑  收藏  举报

导航