У меня есть HBitmap, который я получаю от API, который я использую для преобразования страниц в документы PDF. Результирующее растровое изображение - 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 в независимое от устройства растровое изображение, которое можно использовать с помощью нашего внутреннего инструментария для обратной записи в различные форматы документов.
Проблема
Полученный HBitmap от Foxit никогда не выглядит полностью черным или белым. Есть ли алгоритм, который я могу использовать, чтобы увидеть, достаточно ли он «близок» и преобразовать его? пиксельный формат растрового изображения используется при сохранении его обратно в pdf для определения используемого сжатия.