PDFドキュメントのページを変換するために使用しているAPIから受け取っているHBitmapがあります。結果のビットマップは 24 ビット カラー ビットマップです。PDFに作成された白黒のスキャン画像を使用して、Foxitから得られたビットマップで白黒であることを判断しようとしています。Foxit は PDF API です。ここにいくつかのコードがあります!(c++/cli)
// Get HBITMAP using Foxit's RenderPage function
// to convert to dib later
IntPtr hbitmap = FlattenPageToHBitmap(filename, page);
if (hbitmap == IntPtr::Zero)
return IntPtr::Zero;
Bitmap^ b = Bitmap::FromHbitmap(hbitmap);
bool isColor = false;
for (int y = 0; y < b->Height; y++)
{
for (int x = 0; x < b->Width; x++)
{
Color^ c = b->GetPixel(x, y);
unsigned int bits = (int)c->ToArgb();
bits = bits << 8;
bits = bits >> 8; //should get rid of A in ARGB
bool white = (bits == 0xFFFFFF);
bool black = (bits == 0);
if (!black && !white)
{
isColor = true;
break;
}
}
if (isColor)
break;
}
}
この HBitmap を取得し、その色を決定したら、HBitmap をデバイスに依存しないビットマップに変換します。このビットマップは、社内のツールキットを使用してさまざまなドキュメント形式に書き戻すことができます。
問題
Foxit から生成された HBitmap は、完全に黒または白のようには見えません。「十分に近い」かどうかを確認して変換するために使用できるアルゴリズムはありますか? ビットマップのピクセル形式は、使用する圧縮を決定するために pdf に保存するときに使用されます。