0

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);

しかし、白い色を透明に変換する方法がわかりません。

4

1 に答える 1