2008-12-02 91 views
8

我已经得到了重新调整,我认为一些图像C#代码是很典型:形象的.Net调整与抗锯齿

Bitmap bmp = new Bitmap(image, new Size(width, height)); 
Graphics graphics = Graphics.FromImage(bmp); 
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; 
graphics.CompositingQuality = CompositingQuality.HighQuality; 
graphics.SmoothingMode = SmoothingMode.AntiAlias; 
graphics.DrawImage(bmp, width, height); 

的问题是,得到的图像清楚地别名,并转移到InterpolationMode和SmoothingMode属性似乎没有区别。

任何指针?

回答

0

问题可能是另一个地方。我使用类似的代码来调整图像和它的作品不错,但最大的不同是,当你将图像保存您必须指定质量(JPEG):

ImageCodecInfo[] codecs=ImageCodecInfo.GetImageEncoders(); 
ImageCodecInfo codec = null; 
for (int i = 0; i<codecs.Length;i++) 
{ 
    if(codecs[i].MimeType.Equals("image/jpeg")) 
    codec = codecs[i]; 
} 

EncoderParameters encoderParametersInstance = null; 

if (codec!=null) 
{ 
    Encoder encoderInstance=Encoder.Quality; 
    encoderParametersInstance = new EncoderParameters(2); 
    //100% quality, try different values, around 80-90 gives good results. 
    EncoderParameter encoderParameterInstance=new EncoderParameter(encoderInstance, 100L); 
    encoderParametersInstance.Param[0]=encoderParameterInstance; 
    encoderInstance=Encoder.ColorDepth; 
    encoderParameterInstance=new EncoderParameter(encoderInstance, 24L); 
    encoderParametersInstance.Param[1]=encoderParameterInstance; 
} 

MemoryStream ms = new MemoryStream(); 
resizedImage.Save(ms, codec, encoderParametersInstance); 
2

抗锯齿无关与光栅图形。它只适用于矢量图形。很明显,图像是一个光栅图形。

您需要查看InterpolationMode。

+0

嗨,恕我直言,你的抗锯齿定义并不完全正确。这不是一个光栅与矢量图形的事情。 – 2008-12-02 11:22:28

18

它变成了错误的代码。它实际上在Bitmap构造函数中没有插值的情况下调整图像大小,然后尝试平滑地调整该版本的大小,使其达到它的大小。下面是修改后的代码:

Bitmap bmp = new Bitmap(width, height); 
Graphics graph = Graphics.FromImage(bmp); 
graph.InterpolationMode = InterpolationMode.High; 
graph.CompositingQuality = CompositingQuality.HighQuality; 
graph.SmoothingMode = SmoothingMode.AntiAlias; 
graph.DrawImage(image, new Rectangle(0, 0, width, height)); 

至于抗混叠得好,最重要的参数是graph.InterpolationMode

谢谢。