Pode Graphics.DrawImage acidentalmente cortar uma imagem?
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:
- 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.
- Existe uma maneira mais rápida para converter uma imagem para 24 BPP na memória?
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