/// <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,如有雷同,请多多谅解。