Может ли Graphics.DrawImage непреднамеренно обрезать изображение? - PullRequest
0 голосов
/ 15 января 2009

Я использую код, который принимает растровое изображение и преобразует его в 24 BPP, чтобы я мог использовать его в программе, которая специально требует этот формат файла. Вот код:

    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);
    }

У меня есть два вопроса по поводу кода выше:

  1. С определенным изображением, я думаю что это подрезало самые правые 200 пикселей сразу от tempImage2. Является это возможно? Как это может случиться, и как я могу это остановить? мой друг предположил, что это может быть связано с шагом используемый файл TIFF.
  2. Есть ли более быстрый способ конвертировать изображение в 24 БПП в памяти?

1 Ответ

1 голос
/ 15 января 2009

Лучший способ - использовать метод Bitmap.Clone . Это принимает PixelFormat в качестве параметра:

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);    
    }
}
...