Qt5 で qwebview のクロマ キーを作成しようとしています。これは、特定の色を透明にする必要があることを意味します (他のウィジェットは、その色の webview のピクセルから見えるようにする必要があります)。QPainter::CompositionMode 操作を使用して実行できることがわかりましたが、機能させることはできません。
たとえば、webview のすべての黒いピクセルを透明にする必要があります (実行時にソースの色を変更する必要があります)。
クラスに 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);
しかし、白い色を透明に変換する方法がわかりません。