Я пытаюсь создать хроматический ключ для qwebview в Qt5. Это означает, что мне нужно сделать определенный цвет прозрачным (другие виджеты должны быть видны через пиксели веб-просмотра с этим цветом). Я обнаружил, что это можно сделать с помощью операций QPainter::CompositionMode, но не могу заставить это работать.
Например, мне нужно сделать все черные пиксели веб-просмотра прозрачными (исходный цвет должен быть изменен во время выполнения).
Я переделал QWebView::paintEvent в своем классе (получил часть кода из исходников Qt), но не знаю, что делать дальше
WebView::paintEvent(QPaintEvent *event) {
if (!page()) return;
QWebFrame *frame = page()->mainFrame();
QPainter painter(this);
painter.setRenderHints(renderHints());
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
frame->render(&painter, event->region());
}
Я нашел способ сделать любой исходный цвет белым с помощью следующего кода:
QWebFrame *frame = page()->mainFrame();
QImage source_image(size(), QImage::Format_ARGB32_Premultiplied);
QImage result_image(size(), QImage::Format_ARGB32_Premultiplied);
QPainter imagePainter(&source_image);
imagePainter.setRenderHints(renderHints());
frame->render(&imagePainter, event->region());
imagePainter.end();
QImage mask = source_image.createMaskFromColor(qRgb(0x00,0x00,0x00)); // Source color
QPainter resultPainter(&result_image);
resultPainter.drawImage(source_image.rect(), source_image);
resultPainter.setCompositionMode(QPainter::CompositionMode_Screen);
resultPainter.drawImage(source_image.rect(), mask);
QPainter painter(this);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.drawImage(0, 0, result_image);
Но я не знаю, как преобразовать белый цвет в прозрачный.