Компоненты RGB теряются при изменении размера, когда альфа равна нулю - PullRequest
1 голос
/ 26 марта 2020

Я использую Magick ++ API ImageMagick в C ++ для уменьшения изображения RGBA вдвое.

Magick::Image input(input_file);
input.flip();
input.resize(Magick::Geometry(image.px_width, image.px_height));
Magick::Blob blob;
input.write(&blob, "RGBA");
//input.write("out.png"); // Behaves the same

Исходное изображение

Исходный файл: https://i.stack.imgur.com/BoYyH.png

RGBA с прозрачностью альфа: https://i.stack.imgur.com/MuGQm.png

Только каналы RGB: https://i.imgur.com/1ZRp2K9.png

Только альфа-канал: https://i.imgur.com/gpjTxVJ.png

Обратите внимание на три цветные точки и каналы RGB, где альфа-канал равен нулю.

Выходное изображение

RGBA с прозрачностью альфа: https://i.imgur.com/V9aF6S5.png

Только RGB-каналы: https://i.imgur.com/ERIbiMS.png

Альфа-канал правильный.

Три точки исчезли. Кажется, что ImageMagick подумал, что, поскольку точки полностью прозрачны, он может отбросить информацию. Проблема в том, что есть ценная информация, которая теряется и нарушает изображение рендеринга, которое ожидает эти данные.

Я получаю такое же испорченное поведение, когда запускаю образ через утилиту convert:

$ convert in.png -resize 512x512 out.png

И я смог исправить это с помощью этой команды:

$ convert in.png -channel RGBA -separate -resize 512x512 -combine out.png

Как я могу реализовать это правильное поведение с помощью Magick ++ API?

...