私は8x8ピクセルの4チャンネルpng画像を持っていて、それはQImage
で読み込まれています。その後、QImage
は200倍にスケールされるので、画像は1600x1600の新しい解像度を持ち、元の各ピクセルは200x200のサイズを持ちます。しかし、この画像がQPixmap
の手段によってQLabel
に加えられ、スクリーン上に示されると、描かれたピクセルはわずかに異なるサイズを有することになる。スケーリングされたQImageをペイントするときにピクセルサイズを均一にする方法は?
私はGimp
でスクリーンショットを撮り、ペイントされたイメージをより詳細に観察しました。他のすべてのピクセルは、たとえば200ピクセル幅ではなく、201ピクセルよりもわずかに大きいようです。行の最後のピクセルは、補正するために小さくなるので、画像全体が最終的に正しいサイズになります。
これは、すべてのスケーリング要因を発生しない100は、例えば、微細であるので、私の元のアプローチは、場合QGraphicsView
とQGraphicsPixmapItem
を使用していたような256
などの2の累乗である要因は、あります私は画像の代わりにGraphicsItemを拡大/縮小しました。その効果は同じでした。
私はここでどんな効果が見られますか?そして何か、それについては何ができるのでしょうか?
この問題を再現するコードは非常に簡単です
int scale = 200;
image = QImage("some image file");
QPixmap pixmap = QPixmap::fromImage(image.scaled(image.size() * scale));
some_label->setPixmap(pixmap);
これはあなたの問題を解決するかどうかはわかりませんが、ここに示すように、(スケーリングされていない)ピクスマップを描くときに自分でスケーリングを行うことができます:https://github.com/gerbilvis/gerbil/blob/master/gui/ widgets/scaledview.cpp#L103ここで設定したQTransformを使ってスケーリングが行われます:https://github.com/gerbilvis/gerbil/blob/master/gui/widgets/scaledview.cpp#L72(あなたのQTransformははるかに簡単です固定スケールおよび翻訳付き)Btw。これはGLレンダリングバックエンドを使用する非常に効率的な方法です。 – ypnos
ありがとうございます。私はこの問題がスケーリングアルゴリズムから来るかもしれないと推測していないでしょう。私はそれが単なる絵画/プレゼンテーションの問題だと思った。しかし、私はちょうどディスクに十分な縮尺の画像を保存した、それは間違っている。ヒントをありがとう:) – ifschleife