Почему этот код заставляет QImage терять свой альфа-канал?

Я пытаюсь понять, почему приведенный ниже код изменяет QImage в Qt. Это не предназначено для чего-либо (пока), это просто для тестирования. Когда я запускаю код на изображении с альфа-каналом, альфа-канал теряется и заменяется черным фоном.

QImage image;
image.load("image.png");

for (int y = 0; y < image.height(); y++) {
    for (int x = 0; x < image.height(); x++) {
        QColor c = QColor::fromRgba(image.pixel(x, y));
        c.setHsv(c.hue(), c.saturation(), c.value());
        image.setPixel(x, y, c.rgba());
    }
}

Вот результат, когда я закомментировал строку image.setPixel(...):

введите здесь описание изображения

А вот результат со строкой image.setPixel(...):

введите здесь описание изображения

Я ожидаю, что мой код не изменит изображение. Есть идеи, почему он это делает?


person laurent    schedule 08.08.2011    source источник


Ответы (1)


Если вы посмотрите документацию по setHsv(), вы увидите, что alpha по умолчанию устанавливается на 255 (или 1.0 для версии с плавающей запятой), если вы не укажете это явно.

Возможно, использование строки c.setHsv(c.hue(), c.saturation(), c.value(), c.alpha()); решит вашу проблему.

person Bart    schedule 08.08.2011