0

我正在使用采用位图并将其转换为 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. 对于一个特定的图像,我认为这会从 tempImage2 中剪掉最右边的 200 个像素。这可能吗?这怎么可能发生,我该如何阻止它?我的一个朋友建议这可能与正在使用的 TIFF 文件的步幅有关。
  2. 有没有更快的方法将图像转换为内存中的 24 BPP?
4

1 回答 1

1

更好的方法是使用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);    
    }
}
于 2009-01-15T16:40:56.117 回答