c# gdi+输出成不同mime类型的图片

时间:2023-03-08 17:14:17

/// <summary>
/// 通过图片的mime类型得到相应的编码器
/// </summary>
/// <param name="mimeType">图片的mime类型</param>
/// <returns></returns>
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;
}

void OutputImage()

{

  

//初始化编码器(目前支持图片的mime类型有:image/bmp,image/tiff,image/jpeg,image/gift,image/png)

//选择不同的编码器,可生成不同mime类型的图片
ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/bmp")

//初始化图片编码器参数
EncoderParameters myEncoderParameters;

// 在这里设置图片的质量等级为100L. (MSDN说是越高越好,输出图片损耗越低,图片Size越大)
EncoderParameter  myEncoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);

//将构建出来的EncoderParameter对象赋给EncoderParameters数组

myEncoderParameters.Param[0] = myEncoderParameter;

//初始化一个bitmap对象

Bitmap map = new Bitmap(100,100);

Graphics g = Graphics.FromImage(map);

//清空画布并以透明背景色填充
g.Clear(Color.White);

Render(g);

SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = @"bmp图片(*.bmp)|*.bmp";
saveFileDialog.FilterIndex = 1;
saveFileDialog.RestoreDirectory = true;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
  string fileName = saveFileDialog.FileName;
  map.Save(fileName, myImageCodecInfo, myEncoderParameters);

//map.Save(fileName);实测:直接输出不加任何参数质量是最高的
}

}

//渲染一个矩形

void Render(Graphics g)

{

  g.drawRectangle(new Pen(Color.Red),new Rectangle(0,0,52,52));

}

个人理解:图片不同的mime类型应该对应不同的压缩比

    jpeg,有损压缩,

bmp(位图)无损存贮,不压缩

以下为百度解释:

     BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,     因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。     由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

    jpg全名应该是JPEG   JPEG 图片以 24 位颜色存储单个光栅图像。JPEG 是与平台无关的格式,支持*别的压缩,不过,这种压缩是有损耗的。渐近式 JPEG 文件支持交错。    可以提高或降低 JPEG 文件压缩的级别。但是,文件大小是以图像质量为代价的。压缩比率可以高达 100:1。(JPEG 格式可在 10:1 到 20:1 的比率下轻松地压缩文件,而图片质量不会下降。)JP    EG 压缩可以很好地处理写实摄影作品。但是,对于颜色较少、对比级别强烈、实心边框或纯色区域大的较简单的作品,JPEG 压缩无法提供理想的结果。有时,压缩比率会低到 5:1,严重损失了图片完整性。    这一损失产生的原因是,JPEG 压缩方案可以很好地压缩类似的色调,但是 JPEG 压缩方案不能很好地处理亮度的强烈差异或处理纯色区域。

   华丽的分割线:刚开始写博客,感觉有的东西好似是明白了,但是写出来真的好难。膜拜博客园的各位大神!!             

  ps:部分代码,从网上Copy,如有雷同,请多多谅解。