// Este artículo ha sido traducido por www.blue1000.com , la dirección original es http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx
// Respete los frutos del trabajo de los demás, indique la fuente al reimprimir.
GDI+ se utiliza a menudo al escribir programas. Puede guardar una imagen oscura de 32 bpp como un archivo gif y el proceso es relativamente simple. Y antes de guardar esta imagen gif usando el método CreateThumnailImage, también puedes ajustar su tamaño.
Códigos de uso común:
El código anterior puede completar el dibujo y guardado de archivos gif, pero pronto encontrará un problema: la miniatura generada); La calidad de imagen del archivo .gif está muy por debajo de nuestras expectativas.
Imagen del efecto:
La imagen granulada de baja calidad que se muestra arriba también requiere un procesamiento de "cuantización de color" (paletización). Esto sucede porque GDI+ usa 256 colores de forma predeterminada, sin considerar el color real de la imagen.
Después de eso, intentamos crear nuestra propia "paleta", pero los resultados fueron aún peores :). Un buen algoritmo de "cuantización de color" debería considerar llenar el espacio entre dos partículas de píxeles con un color de transición que sea similar al color de los dos píxeles, proporcionando un espacio de color más visible.
Este es el algoritmo "Octree". El algoritmo "Octree" nos permite conectar nuestro propio algoritmo para cuantificar nuestras imágenes.
Aquí hay dos artículos de Microsoft que pueden resultarnos útiles: KB 319061 y Optimización de la cuantificación del color para imágenes ASP.NET (por Morgan Skinner, Microsoft). Morgan Skinner proporciona un buen código de algoritmo "Octree", que puede descargar como referencia.
Usar OctreeQuantizer es fácil:
System.Drawing.Bitmap b = nuevo System.Drawing.Bitmap(“c:\original_image.gif“);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
Cuantizador OctreeQuantizer = nuevo OctreeQuantizer (255, 8);
usando (Mapa de bits cuantificado = cuantificador.Cuantizar (miniatura))
{
cuantificado.Save(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
OctreeQuantizer grayquantizer = nuevo GrayscaleQuantizer ( );
usando (Mapa de bits cuantificado = grayquantizer.Quantize (thmbnail))
{
cuantificado.Save(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
La imagen del efecto es la siguiente (¿es mucho más hermosa?):