2017-04-01 49 views
1

QMLキャンバスdrawImageメソッドを使用してSVGアイコンをレンダリングする際に問題が発生しています。 基本的に、QMLキャンバスはラスタライズサイズを無視し、元のサイズ(この場合は48x48px)からペイントして醜いエイリアシングエフェクトで拡大します。QMLキャンバスでのSVGラスタライズの問題

誰もこれを見て、解決策を見つけたことはありますか?

実用的な自己完結型の例については、QTBUG-59878を参照してください。 ここでは、QMLコードと私が見るもののスクリーンショットだけをコピーします。

enter image description here

左から

  • 画像アイテム(正しい)
  • として元のSVGアイコンのdrawImage(によってレンダリング同じ画像アイテムは、正直であることが私はこのような正確であると予想さよく、ラスタライズされたデータはImageによって提供されるべきです)
  • documentationで説明された手順でロードされたSVGアイコン、loadImageおよびonImageLoadedを持つ

輸入QtQuick 2.0

Rectangle 
{ 
    width: 640 
    height: 480 

    Image 
    { 
     id: svgIcon 
     source: "qrc:/qt_logo.svg" 
     x: 10 
     y: 100 
     width: 180 
     height: 200 
     sourceSize: Qt.size(width, height) 
    } 

    Canvas 
    { 
     id: canvas 
     anchors.fill: parent 
     contextType: "2d" 
     property string imagefile: "qrc:/qt_logo.svg" 

     Component.onCompleted: context.loadImage(imagefile) 

     onImageLoaded: requestPaint() 

     onPaint: 
     { 
      context.drawImage(svgIcon, 200, 100, 180, 200) 
      context.drawImage(imagefile, 400, 100, 180, 200) 
     } 
    } 
} 

答えて

0

私は、パフォーマンスが非常に悪く、アップスケーリングおよびダウンスケーリングの品質が十分ではない、QML内SVGで働いています。 SVGを使用してアイコンを表示している場合は、SVGアイコンの代わりにフォントを使用することをお勧めします。これはかなり高速で高品質です。

+0

私は既にいくつかの他のアイコンにFontAwesomeを使用していますが、SVGも必要です。さらに、フォントは単色である。 –