Qt: пустой прозрачный QImage имеет шум

Я пытаюсь сделать некоторый закадровый рендеринг на QImage (ничего особенного, просто несколько составных эскизов) и столкнулся с проблемой, когда даже новые и предположительно пустые QImages имеют довольно серьезный шум:

скриншот

Код для воспроизведения довольно прост:

QImage image = new QImage(
        (int) b.width(), (int) b.height(),
        QImage.Format.Format_ARGB32);
painter.drawImage(0, 0, image);

(b — это просто QRectF, содержащий границы QGraphicsItem, на котором я рисую)

Заполнение нового изображения, похоже, не имеет никакого эффекта:

QPainter p = new QPainter(image);
p.fillRect(b, QColor.transparent);
p.end();

Заполнение его любым сплошным цветом (например, белым) удаляет шум, но, к сожалению, мне нужно, чтобы это конкретное изображение было прозрачным. Есть ли способ убрать шум?

Я использую Qt Jambi (4.7.1-beta), хотя не думаю, что это должно иметь большое значение.


person timothyb89    schedule 20.11.2012    source источник


Ответы (1)


Из документации для QImage::QImage(int width, int height, Format format):

Предупреждение: это создаст QImage с неинициализированными данными. Вызовите fill(), чтобы заполнить изображение соответствующим значением пикселя перед рисованием на нем с помощью QPainter.

Поэтому вызовите QImage::fill(uint pixelValue) на своем изображении после его создания.

person Arnold Spence    schedule 20.11.2012
comment
В качестве продолжения, если вы хотите, чтобы изображение было прозрачным, вы можете заполнить его image.fill(qRgba(0, 0, 0, 0)); - person José Tomás Tocino; 02.10.2018