2012-03-19 10 views
1

Qt 4.7を使用しています。 (フォントサイズの変更に変化) イメージでテキストを塗りつぶす方法。スケール&センター(垂直と水平)?

  • 画像
    1. フィルテキスト(文字、eg'A ')と、その画像がテキストのサイズに縮小することにしたい:私はにしたいです画像をそのテキストの中心から垂直方向および水平方向にセンタリングする必要があります。

    enter image description here

    これは、1つの文字のために達成されたとき、私は範囲内の多くの文字のために同じことをやりたい(のような「A」 - 「H」)、または文字列の文字がで入力ランタイム。このため

    現在、私はこの手法を採用しています:

    [ bgTextImage.h ] 
    QTextCursor cursor; 
    QTextCharFormat format; 
    QString imageFileName 
    
    [ bgTextImage.cpp ] 
    cursor = ui->textEdit->textCursor(); 
    QPixmap pic(imageFileName); 
    QFontMetrics fontMetrics(format.font()); 
    QSize fMSize = fontMetrics.size(0, "A", 0, 0); 
    QPixmap newPixmap = pic.scaled(fMSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation); 
    
    if(newPixmap.width() > fMSize.width()) 
    { 
        int x = (newPixmap.width() - fMSize.width())/2; 
        newPixmap = newPixmap.copy(x, newPixmap.rect().y(), fMSize.width(), fMSize.height()); 
    } 
    
    if(newPixmap.height() > fMSize.height()) 
    { 
        int y = (newPixmap.height() - fMSize.height())/2; 
        newPixmap = newPixmap.copy(newPixmap.rect().x(), y, fMSize.width(), fMSize.height()); 
    } 
    
    format.setForeground(QBrush(newPixmap)); 
    format.setTextOutline(QPen(borderColor, ui->spinBoxWidth->value())); 
    
    ui->textEdit->clear(); 
    cursor.insertText(text, format); 
    

    それはCSSや他の技術と整合しなければならないときのように、私は、結果を取得していますが、画像が正しくセンタリングされていません。 これは、この仕事を終わらせるための非常にアマチュアなアプローチであると感じています。したがって、もしあれば、より良い、またはベストプラクティスを探しています。そうでなければ、少なくとも現在のプロセスを改善する方法があれば教えてください。

  • 答えて

    1

    QPainterは画像合成を行うことができます(また、ペイント機能の外で使用することもできます)。 QPainter::CompositionMode_SourceOverのように見えますが、ソースイメージをバックグラウンドにして、あなたのレターイメージと組み合わせると、あなたが望む結果が得られます。

    ドキュメントを参照するのは嫌いですが、チュートリアルでは実際に良いexample(気にしない限り、OpenGLの内容は無視されます)があります。

    +0

    答えLeviXありがとうございます。これは有望そうだ。私はそれについて知っていましたが、これまでに使ったことはありません。私はそれを試し、結果を共有します。 – zeFree

    関連する問題