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

上記のコードについて 2 つの質問があります。

  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 に答える