0

在花了一些时间之后,将 QImage 转移到 ITexture 工作正常,但我无法让透明度在 ITexture 上工作。

如果有人能理解我的问题在哪里,这里有两个函数。

字体绘制正确,但完全没有透明度。

提前致谢...

void MainWindow::on_singerShow_clicked(bool checked)
{
    int currentItem = ui->singerList->currentRow();

    if ( currentItem >= 0 && iWind )
    {
        if ( checked )
        {
            QString text = ui->singerList->item(currentItem)->text();

            QImage temp(singerIWidth,singerIHeight,QImage::Format_ARGB32);
            temp.fill( 0 );
            QPainter paint;
            paint.begin(&temp);

            QFont font(ui->singerFont->font());
            font.setPointSize( ui->singerSize->value() );
            font.setBold( ui->singerBold->isChecked() );

            QString fStr = ui->singerFrontColour->currentText();
            QString sStr = ui->singerShadowColour->currentText();

            paint.setFont( font );

            paint.setPen( sStr );
            paint.drawText(QRect(6,6,singerIWidth,singerIHeight),
                           Qt::AlignCenter, text);

            paint.setPen( fStr );
            paint.drawText(QRect(0,0,singerIWidth,singerIHeight),
                           Qt::AlignCenter, text);

            paint.end();

            iWind->setSinger(checked, &temp);
        }
        else
        {
            iWind->setSinger(checked, 0);
        }
    }
}

void IrrlichtWindow::setSinger(bool checked, QImage *img)
{
    // a straight forward memcpy because both QImage and ITexture
    // are exactly the same size and format

    if ( checked )
    {
        void *src = (void*)img->bits();
        void *dst = singerTexture->lock();
        memcpy( dst, src, singerIWidth * singerIHeight * 4 );
        singerTexture->unlock();
        singer->setMaterialTexture(0, singerTexture);
        singer->setVisible(true);
        singer->setMaterialFlag(video::EMF_BLEND_OPERATION,
                                video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
    }
    else
    {
        singer->setVisible(false);
    }
}
4

0 回答 0