0

私は PyQt を使用して次の方法で画像を表示しています (一般的なアプローチを示すために、面倒な詳細を省略しています)。

class MyGraphicsView(QGraphicsView):

    def __init__(self, parent = None):
        super(MyGraphicsView, self).__init__(parent)

        self.scene = QGraphicsScene()
        qImage = QImage(myPixels.data, numColumns, numRows, QImage.Format_Indexed8)
        qImage.setColorTable(self.gray_color_table)
        self.sceneImage = self.scene.addPixmap(QPixmap.fromImage(qImage))

すべてが機能し、画像がウィンドウに正しく表示されます。次に、次のようにして画像の一部を表示します。

self.fitInView(roiCoords[0], roiCoords[2], roiCoords[1]-roiCoords[0], roiCoords[3]-roiCoords[2], Qt.KeepAspectRatio)

ここで、「roiCoords」は、実行時にプログラムによって生成される xmin、xmax、ymin、ymax を含む単なるリストです。この問題は、ユーザーが画像が表示されているウィンドウのサイズを変更したときに発生します。デフォルトの動作、つまりズームは同じままですが、ユーザーがウィンドウのサイズを変更すると画像がトリミングされる(またはより多くの画像が表示される)ため、ウィンドウのサイズ変更イベントで「fitInView(...)」を呼び出していません。私の質問は、ユーザーがウィンドウのサイズを変更して保存できるようにしたときに表示可能な画像 (ピックスマップ) の部分を決定する方法です (この理由は、関心領域の四角形を更新しようとしているからです。は、画像の小さな表現の上に描画されており、ユーザーが画像を含むウィンドウのサイズを変更するときに、縦横比と位置に関してこれを同期させる必要があります。) 探し回ったが、何も見つからない. どんな助けでも大歓迎です。

更新: サイズ変更イベントでウィンドウのサイズを確認してから、シーンにマップできる可能性があることに気付きました。以下のいくつかの変形:

def resizeEvent(self, event):

    newWidth = self.width()
    newHeight = self.height()
    uperLeftROICoord = self.graphicsView.mapToScene(0, 0)
    lowerRightROICoord = self.graphicsView.mapToScene(newWidth - 1, newHeight - 1)
4

0 に答える 0