2

私はこれにしばらく苦労しており、すべての選択肢を使い果たしたように感じているので、誰かが私を助けてくれることを願っています;

一連の DDS ファイルをロードし、それらを QImage オブジェクトに変換して QGraphicsView に表示しようとしています。ここまでは順調に進んできましたが、今は越えられない壁にぶつかっています。これまでにこれらのリソースを参照しましたが、問題を解決できませんでした:

テックアーティストの投稿

githubの投稿

pyqt4 リファレンス

QT フォーラムの投稿、これが本当の始まりです

def readDDSFile(self, filePath, width, height):
    glWidget = QGLWidget()
    glWidget.makeCurrent()
    glWidget.setGeometry(0,0,width,height) # init width and height, in an attempt to force the widget to be the same size as the texture

    # works fine, DDS file loads without problem
    texture = glWidget.bindTexture(filePath)
    if not texture:
        return QtGui.QImage()

    # Determine the size of the DDS image
    glBindTexture(GL_TEXTURE_2D, texture)

    self._width =  glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH)
    self._height = glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT)

    if self._width == 0 and self._height == 0:
        return QtGui.QImage()

    # up to here, everything works fine, DDS files are being loaded, and, in the line below, rendered. They're just being rendered way too small.
    glWidget.drawTexture(QtCore.QRectF(-1,-1,2,2), texture)
    return (glWidget.grabFrameBuffer())

そして、基本的に同じことをしている古いGoogleグループの議論の束(それはすべて最後のリンクから始まったようです)

現在、PyQt5、Python バージョン 3.5.0 を使用しています

問題はこれです:PyaQt5では、QGLPixelBufferはサポートされていないようです(インポートしようとしているモジュールに関係なく、とにかくインポートできないようですので、そうであると思います)ので、レンダリング プラットフォームとしての QGLWidget。ただし、上記のコードでは、テクスチャのサイズが正しく設定されていないようです。私が何をしても、それらは一貫して小さすぎます。

私はこのコードを techartists スレッドから取得しました (ほとんどの場合)。そこで何が起こっているのか理解できれば、そこに問題がある可能性が高いと思います。

誰かがこれについて何か考えを持っているなら、私はそれを大いに感謝します...

乾杯

4

1 に答える 1

0

これを1日半かけて探したときに見つけた答えを投稿しようと思いました。知っておくと便利です。

ほとんどの画像ファイル形式をネイティブにサポートし、QImage クラスが読み取って QImage クラスを作成できるピクセル データの配列を非常に簡単に返すことができるpygletを使用して、これを解決しました。コードは次のようになります。

import pyglet

def readDDSFile(filePath):
    _img = pyglet.image.load(filePath)
    _format = tex.format
    pitch = tex.width * len(_format)
    pixels = tex.get_data(_format, pitch)

    img = QtGui.QImage(pixels, tex.width, tex.height, QtGui.QImage.Format_RGB32)
    img = img.rgbSwapped()

    return img
于 2016-06-30T08:46:43.873 に答える