//Este artigo foi traduzido por www.blue1000.com , o endereço original é http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx
//Respeite os frutos do trabalho alheio, indique a fonte ao reimprimir.
GDI+ é frequentemente usado ao escrever programas. Ele pode salvar uma imagem escura de 32 bpp como um arquivo gif e o processo é relativamente simples. E antes de salvar esta imagem gif usando o método CreateThumnailImage, você também pode ajustar seu tamanho.
Códigos comumente usados:
O código acima pode completar o desenho e salvamento de arquivos gif, mas você logo encontrará um problema: a miniatura gerada A miniatura gerada a qualidade da imagem do arquivo .gif está muito abaixo de nossas expectativas.
Imagem do efeito:
A imagem granulada e de baixa qualidade mostrada acima também requer processamento de "quantização de cores" (paletização). Isso acontece porque o GDI+ usa 256 cores por padrão, sem considerar a cor real da própria imagem.
Depois tentamos criar nossa própria “paleta”, mas os resultados foram ainda piores :). Um bom algoritmo de “quantização de cores” deve considerar o preenchimento do espaço entre duas partículas de pixel com uma cor de transição semelhante à cor dos dois pixels, proporcionando um espaço de cores mais visível.
Este é o algoritmo "Octree". O algoritmo “Octree“ nos permite conectar nosso próprio algoritmo para quantizar nossas imagens.
Aqui estão dois artigos da Microsoft que podem ser úteis para nós: KB 319061 e Otimizando Quantização de Cores para Imagens ASP.NET (por Morgan Skinner, Microsoft). Morgan Skinner fornece um bom código de algoritmo "Octree", que você pode baixar para referência.
Usar o OctreeQuantizer é fácil:
System.Drawing.Bitmap b = new System.Drawing.Bitmap(“c:\imagem_original.gif“);
System.Drawing.Image thmbnail = b.GetThumbnailImage(100,75,null,new IntPtr());
quantizador OctreeQuantizer = novo OctreeQuantizer(255, 8);
usando (Bitmap quantizado = quantizer.Quantize (thmbnail) )
{
quantizado.Save(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
OctreeQuantizer grayquantizer = novo GrayscaleQuantizer ( );
usando (Bitmap quantizado = grayquantizer.Quantize (thmbnail))
{
quantizado.Save(“c:\thumnail.gif“, System.Drawing.Imaging.ImageFormat.Gif);
}
A imagem do efeito é a seguinte (é muito mais bonita?):