Estoy usando StretchImage porque la caja se puede cambiar de tamaño con divisores. Parece que el valor predeterminado es algún tipo de filtrado bilineal uniforme, lo que hace que mi imagen sea borrosa y tenga patrones de muaré.¿Cómo hago para que un PictureBox use el remuestreo del vecino más cercano?
Respuesta
que necesitaba esta funcionalidad además. Hice una clase que hereda cuadro de imagen, anula OnPaint
y añade una propiedad para permitir el modo de interpolación para ajustar:
/// <summary>
/// Inherits from PictureBox; adds Interpolation Mode Setting
/// </summary>
public class PictureBoxWithInterpolationMode : PictureBox
{
public InterpolationMode InterpolationMode { get; set; }
protected override void OnPaint(PaintEventArgs paintEventArgs)
{
paintEventArgs.Graphics.InterpolationMode = InterpolationMode;
base.OnPaint(paintEventArgs);
}
}
Muy agradable. Creo que PanAndZoomPictureBox de EmguCV hace lo mismo. ¿Conoces algún problema de rendimiento al hacerlo? – Pedro77
No he tenido ninguna diferencia de rendimiento mensurable cambiando el modo de interpolación de esta manera. – JYelton
Humm bueno. ¡Jared Updike debería marcar tu respuesta! :) – Pedro77
Sospecho que tendrá que hacer el cambio de tamaño manualmente a través de la clase de imagen y la función DrawImage y responder a los eventos de cambio de tamaño en el PictureBox.
Al cambiar el tamaño de una imagen en .NET, el System.Drawing.Drawing2D.InterpolationMode ofrece los siguientes métodos: redimensionar
- Bicúbico
- bilineales
- alta
- HighQualityBicubic
- HighQualityBilinear
- Bajo
- Más cercano eighbor
- defecto
No veo cómo responde esto a la pregunta del OP. – JYelton
Hice una búsqueda de MSDN y resulta que hay un artículo sobre esto, que no es muy detallado, pero destaca que se debe utilizar el evento de dibujo.
http://msdn.microsoft.com/en-us/library/k0fsyd4e.aspx
he editado una imagen comúnmente disponibles ejemplo el zoom para utilizar esta función, véase más adelante
Editado de: http://www.dotnetcurry.com/ShowArticle.aspx?ID=196&AspxAutoDetectCookieSupport=1
espero que esto ayude
private void Form1_Load(object sender, EventArgs e)
{
// set image location
imgOriginal = new Bitmap(Image.FromFile(@"C:\images\TestImage.bmp"));
picBox.Image = imgOriginal;
// set Picture Box Attributes
picBox.SizeMode = PictureBoxSizeMode.StretchImage;
// set Slider Attributes
zoomSlider.Minimum = 1;
zoomSlider.Maximum = 5;
zoomSlider.SmallChange = 1;
zoomSlider.LargeChange = 1;
zoomSlider.UseWaitCursor = false;
SetPictureBoxSize();
// reduce flickering
this.DoubleBuffered = true;
}
// picturebox size changed triggers paint event
private void SetPictureBoxSize()
{
Size s = new Size(Convert.ToInt32(imgOriginal.Width * zoomSlider.Value), Convert.ToInt32(imgOriginal.Height * zoomSlider.Value));
picBox.Size = s;
}
// looks for user trackbar changes
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (zoomSlider.Value > 0)
{
SetPictureBoxSize();
}
}
// redraws image using nearest neighbour resampling
private void picBox_Paint_1(object sender, PaintEventArgs e)
{
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
e.Graphics.DrawImage(
imgOriginal,
new Rectangle(0, 0, picBox.Width, picBox.Height),
// destination rectangle
0,
0, // upper-left corner of source rectangle
imgOriginal.Width, // width of source rectangle
imgOriginal.Height, // height of source rectangle
GraphicsUnit.Pixel);
}
¿Qué evento está conectado a su método picBox_Paint_1? sería en alguna otra parte de tu código. –
Sí, está en el código del diseñador de formulario: this.picBox.Paint + = new System.Windows.Forms.PaintEventHandler (this.picBox_Paint_1); – ardunn
- 1. 'Vecino más cercano' zoom
- 2. K Algoritmo del vecino más cercano duda
- 3. Lienzo HTML5: ¿hay alguna manera de cambiar el tamaño de la imagen con el remuestreo del "vecino más cercano"?
- 4. Búsqueda del vecino más cercano 2D para mover puntos
- 5. ¿Cómo funciona la búsqueda del vecino KD más cercano?
- 6. Búsqueda de vecino más cercano en D3
- 7. Distancia de separación del círculo - Vecino más cercano Problema
- 8. Representación de vecino más cercano en lienzo
- 9. K Algoritmo de vecino más cercano
- 10. K vecino más cercano en python
- 11. vecino más cercano - árbol k-d - prueba de wikipedia
- 12. Búsqueda de vecino más cercano utilizando diagramas de Voronoi
- 13. Vecino más cercano Buscar en Python sin árbol k-d
- 14. cómo encontrar k-ésimo vecino más cercano de un punto en un conjunto de punto
- 15. Algoritmo de interpolación de vecino más cercano en MATLAB
- 16. Búsqueda de vecino más cercano con condiciones de contorno periódicas
- 17. ¿Beneficios de la búsqueda del vecino más cercano con el pedido de Morton?
- 18. El mejor algoritmo de rendimiento crítico para resolver al vecino más cercano
- 19. ¿Cómo hago para que VisualStudio 2010 use más de un núcleo de procesador al compilar?
- 20. Mejor estructura de datos para el vecino más cercano en 1 dimensión
- 21. Cómo rotar Imagen de interpolación por el vecino más cercano en Matlab
- 22. ¿Cómo hago para que Java use mi proveedor de seguridad?
- 23. ¿Solución al problema del vendedor ambulante usando el algoritmo del vecino más cercano en una consulta LINQ?
- 24. CSS para seleccionar el descendiente más cercano?
- 25. ¿Cómo puedo usar una medida de distancia diferente para el vecino k-más cercano en Java/Weka?
- 26. LINQ para obtener el valor más cercano?
- 27. Algoritmo para el punto más cercano
- 28. ¿Cómo hago para que Nant use el compilador 4.0 para apuntar a .Net 3.5
- 29. ¿Cómo hago para que Windows Forms Designer use los recursos del ensamblado externo?
- 30. La determinación de la mejor k de k vecino más cercano
lo que no hay manera real de hacer esto? de alguna manera fácil? – Luiscencio
@Luiscencio: así es como se ve. Tendrá que hacerlo usted mismo con un nuevo mapa de bits del tamaño apropiado y luego Graphics.DrawImage –
Debe marcar JYelton answer. :) – Pedro77