C#能修改图片质量吗?

请教一下喔,C#能修改图片大小,但能不能修改图片质量呀?Bitmap类的什麼方法喔?麻烦简短举一个小例,不要一大篇,我这个问题只有一句话,也不值得您老人家一大篇吧... 请教一下喔,C#能修改图片大小,
但能不能修改图片质量呀?

Bitmap类的什麼方法喔?
麻烦简短举一个小例,不要一大篇,我这个问题只有一句话,也不值得您老人家一大篇吧
展开
 我来答
MagicLem
推荐于2016-08-03
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
C#图片处理之: 另存为压缩质量可自己控制的JPEG

处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件
使用C#很方便的就可以把多种格式的图片文件读到Bitmap对象中。一句话就够了,常见的格式都支持,诸如JPEG,BMP,PNG等等。

Bitmap bmp = new Bitmap("文件名");

然后就是怎么处理这个图片的问题了,与本案无关,pass。

最后就是保存。JPEG虽然是有损压缩方案,但是它在缩减文件体积和尽可能好的保留原有信息的矛盾上很好的找到了平衡点,所以在很多情况下成为首选的保存方案。

C#当然不会无视这一点,Bitmap类提供了默认的另存为JPEG的方法:

bmp.Save("输出文件", System.Drawing.Imaging.ImageFormat.Jpeg);

这样当然很方便,但有时候更在乎文件体积而有时候更在乎图像质量,是不是有什么办法可以让自己来控制压缩质量呢?

答案是肯定的,bmp.Save方法中有个重载用到了EncoderParameters参数。我们可以在这个参数中加入自己的控制质量。
/**//// <summary>
/// 保存JPG时用
/// </summary>
/// <param name="mimeType"></param>
/// <returns>得到指定mimeType的ImageCodecInfo</returns>
private static ImageCodecInfo GetCodecInfo(string mimeType)
{
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo ici in CodecInfo)
{
if (ici.MimeType == mimeType) return ici;
}
return null;
}

/**//// <summary>
/// 保存为JPEG格式,支持压缩质量选项
/// </summary>
/// <param name="bmp"></param>
/// <param name="FileName"></param>
/// <param name="Qty"></param>
/// <returns></returns>
public static bool KiSaveAsJPEG(Bitmap bmp, string FileName, int Qty)
{
try
{
EncoderParameter p;
EncoderParameters ps;

ps = new EncoderParameters(1);

p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
ps.Param[0] = p;

bmp.Save(FileName, GetCodecInfo("image/jpeg"), ps);

return true;
}
catch
{
return false;
}

}

参考资料: http://www.itpub.net/viewthread.php?tid=902033

FantasyChump
2010-05-11 · TA获得超过3288个赞
知道大有可为答主
回答量:2127
采纳率:0%
帮助的人:2243万
展开全部
只有JPEG才有图片质量的说法,PNG和BMP是没有的.
要改变JPEG格式保存的图片质量,可以通过传递EncoderParameter.示例代码如下:

/// <summary>
/// 按照指定的精度保存JPG图像
/// </summary>
/// <param name="image">要保存的图像</param>
/// <param name="path">保存的路径</param>
/// <param name="quality">保存的图像质量</param>
public static bool SaveJpegQualityCodecsInfo(System.Drawing.Image image, string path, int quality)
{
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);

var codes = ImageCodecInfo.GetImageEncoders().SingleOrDefault(s => s.MimeType == "image/jpeg");
if (codes == null) return false;

image.Save(path, codes, parameters);
return true;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lovemingming
2010-05-10 · TA获得超过4137个赞
知道大有可为答主
回答量:1422
采纳率:0%
帮助的人:1428万
展开全部
可以是可以,但是那个要用相应的算法的,什么差值啊,什么小波什么的。。。
这我们不是做这个的怎么给你写例子啊。。。
而且就算是做这个的,,这个也不可能是个小例子。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ysyhyt
2010-05-10 · TA获得超过1507个赞
知道小有建树答主
回答量:1599
采纳率:0%
帮助的人:688万
展开全部
可以,回答完毕,只有一句话哦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式