2016-06-28 15 views
1

私はこれをしばらくは苦労しています。私はすべてのオプションを使い果たしたように感じます。PyQt5 Python 3.5.0:DDSファイルをQImageに変換

DDSファイルを読み込んでQImageオブジェクトに変換し、QGraphicsViewに表示しようとしています。これまでのところ、私は進歩を遂げてきましたが、今は通過できないような壁を打ちました。

tech-artists post

github pos

pyqt4 reference

QT forum post, this is where it really started

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()) 

と古いグーグルの束:私は私の問題を解決するには運で、これまでのところ、これらのリソースに相談しましたグループディスカッションは基本的に同じことをしています(すべてがそれから始まるようです(私はかかわらず、とにかくそれをインポートすることができないようQGLPixelBufferがサポートされていないようです、PyaQt5で :最後のリンク)私はPyQt5に現在よ

、Pythonのバージョン3.5.0

問題はこれです私はそれをインポートしようとしているので、私はそれがあると推測しています)ので、QGLWidgetをレンダリングプラットフォームとして使用することに限られています。しかし、上記のコードは、正しくテクスチャのサイズを変更していないようです。彼らは私が何をしていても、一貫してあまりにも小さくレンダリングされています。

私はこのコードをTechartistsスレッド(ほとんどの場合はとにかく)から取りました。残念ながら、drawTexture矩形が(-1、-1,2,2)に設定されているため説明はありません。そこに起こっていることを本当に理解していない、私は問題がどこにあるのだろうと推測します。

誰もがこのことについてどんな考えを持っている場合は、私は非常に非常に感謝します...私は私が探し日半を過ごしたように私は私が見た答えを投稿するだろうと思った

乾杯

答えて

0

これは知っておくと便利です。

ほとんどのイメージファイル形式をネイティブにサポートしていて、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 
関連する問題