visual una tamaño que net imagen hacer formulario con como cambie cambiar boton asp ampliar ajustar .net graphics

una - Cambio de tamaño de la imagen en.Net con Antialiasing



como ajustar una imagen en un boton de visual basic (5)

Hay un artículo sobre CodeProject que describe un método antialiasing mejorado:

http://www.codeproject.com/KB/GDI-plus/AntiAliasingIssues.aspx

Tengo un código C # que cambia el tamaño de las imágenes que creo que es bastante típico:

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);

El problema es que las imágenes resultantes son claramente alias y los cambios en las propiedades InterpolationMode y SmoothingMode parecen no tener importancia.

¿Alguna sugerencia?


Anti-aliasing no tiene nada que ver con gráficos de trama. Solo es aplicable a gráficos vectoriales. Obviamente, una imagen es un gráfico de trama.

Necesita mirar el Modo de interpolación.


El problema puede ser otro lugar. Utilizo un código similar para cambiar el tamaño de las imágenes y funciona bien, pero la mayor diferencia es que cuando guardas la imagen tienes que especificar la calidad (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);



Resulta que el código fue simplemente incorrecto. En realidad, estaba cambiando el tamaño de la imagen sin interpolación en el constructor de mapa de bits, y luego intentaba cambiar el tamaño de esa versión al tamaño en el que ya estaba. Aquí está el código enmendado:

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));

En cuanto a anti-aliasing, el parámetro más importante es graph.InterpolationMode .

Gracias.