Pergunta

Eu estou usando o código que leva um bitmap e converte para 24 BPP para que eu possa usá-lo em um programa que especificamente exige que formato de arquivo. Aqui está o código:

    using (Bitmap tempImage = new Bitmap(pageToScan.FullPath))
    {
       if (tempImage.PixelFormat != System.Drawing.Imaging.PixelFormat.Format24bppRgb)
       {
          using (Bitmap tempImage2 = new Bitmap(tempImage.Size.Width, tempImage.Size.Height,
             System.Drawing.Imaging.PixelFormat.Format24bppRgb))
          {
             using (Graphics g = Graphics.FromImage(tempImage2))
             {
                g.DrawImage(tempImage, new Point(0, 0));
             }
             RecognizeBitmap(pageToScan, tempImage2); //Thanks to Tim on this refactoring.
          }
       }
       else
          RecognizeBitmap(pageToScan, tempImage);
    }

Eu tenho duas perguntas sobre o código acima:

  1. Com uma imagem particular, eu acho que este grampeado o mais à direita 200 pixels para a direita fora de tempImage2. É isto possível? Como isso acontecer, e como posso parar com isso? UMA amigo meu sugeriu que pode ter a ver com o passo de o arquivo TIFF a ser utilizado.
  2. Existe uma maneira mais rápida para converter uma imagem para 24 BPP na memória?
Foi útil?

Solução

A melhor maneira é usar o método Bitmap.Clone . Isso leva um PixelFormat como um parâmetro:

using (Bitmap tempImage = new Bitmap(pageToScan.FullPath))    
{           
    if (tempImage.PixelFormat != System.Drawing.Imaging.PixelFormat.Format24bppRgb)
    {
        Rectangle r = new Rectangle(0, 0, tempImage.Width, tempImage.Height);
        RecognizeBitmap(pageToScan, tempImage.Clone(r, PixelFormat.Format24bppRgb);          
    }
    else                  
    {
        RecognizeBitmap(pageToScan, tempImage);    
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top