有効なイメージを作成していません。
im = QImage(self.canvas.buffer_rgba())
実際には、あなたが渡している引数を無視します。使用可能なコンストラクターcanvas.buffer_rgba()
のいずれも使用できないメモリビューを返します。
QImage()
QImage(QSize, QImage.Format)
QImage(int, int, QImage.Format)
QImage(str, int, int, QImage.Format)
QImage(sip.voidptr, int, int, QImage.Format)
QImage(str, int, int, int, QImage.Format)
QImage(sip.voidptr, int, int, int, QImage.Format)
QImage(list-of-str)
QImage(QString, str format=None)
QImage(QImage)
QImage(QVariant)
Python には実際には__init__
メソッドが 1 つしかないため、型チェックは内部チェックで行う必要があります。QImage(QVariant)
は基本的にQImage(object)
(実際、python3 ではまさにそれです) と同じです。そのため、基本的に任意のオブジェクトを渡すことができます。QVariant
内部的に変換できない場合は無視されるため、返される QImage は空になります。 .
生の rgba データから画像を作成する場合は、生のデータからこの情報を取得する方法がないため、サイズと形式を指定する必要があります。これはうまくいくはずです:
size = self.canvas.size()
width, height = size.width(), size.height()
im = QImage(self.canvas.buffer_rgba(), width, height, QImage.Format_ARGB32)
im.save('test.png')
もう 1 つの方法は、キャンバスをピックスマップとして直接取得することです。
pixmap = QPixmap.grabWidget(self.canvas)
pixmap.save('test.png')
クリップボードに保存:
QApplication.clipboard().setPixmap(pixmap)
ああ、あなたは使うべきではありませんgif
、使用してpng
ください。独自の性質のため、gif
通常、サポートされている出力形式として利用できません。確認してくださいQImageWriter.supportedImageFormats()
。