Мне интересно, возможно ли преобразовать 1-битное изображение, загруженное с помощью Magick ++ (Magick::Image image; image.read(path);
), в HBITMAP с глубиной, равной 1 (аналогично тому, что вы получили бы при таком вызове CreateBitmap(width, height, 1, depth, data);
.
Наивные попытки типа CreateBitmap(width, height, 1, depth, image.getConstPixels(0, 0, width, height));
, конечно, не сработали - данные ImageMagick явно хранятся по-другому. Я могу правильно скопировать эти данные, используя контейнер BITMAP
(не полный код):
bitmap.bmWidth = image->image()->columns;
bitmap.bmHeight = image->image()->rows;
bitmap.bmWidthBytes = 4 * bitmap.bmWidth;
bitmap.bmPlanes = 1;
bitmap.bmBitsPixel = 32;
...
for (y = 0; y < (ssize_t)image->image()->rows; y++) {
p = GetVirtualPixels(image->image(), 0, y, image->image()->columns, 1, exception);
if (!p) break;
for (x = 0; x < (ssize_t)image->image()->columns; x++)
{
q->rgbRed = ScaleQuantumToChar(GetPixelRed(image->image(), p));
q->rgbGreen = ScaleQuantumToChar(GetPixelGreen(image->image(), p));
q->rgbBlue = ScaleQuantumToChar(GetPixelBlue(image->image(), p));
q->rgbReserved = 0;
p += GetPixelChannels(image->image());
q++;
}
}
Работает, когда целевым растровым изображением является 32-разрядное изображение. Но давайте предположим, что целевое изображение является 1-разрядным. Есть ли в ImageMagick функция, которая позволяла бы мне извлекать данные так, чтобы их было легкопереведено на 1-бит? Я не могу найти другую функцию, похожую на ScaleQuantumToChar
. Поддерживает ли ImageMagick это?