Преобразование 1-битного изображения, загруженного с помощью Magick ++, в HBITMAP - PullRequest
0 голосов
/ 05 июня 2019

Мне интересно, возможно ли преобразовать 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 это?

...