【问题标题】:PyQt4 - python-djvulibre Segmentation FaultPyQt4 - python-djvulibre 分段错误
【发布时间】:2017-01-12 07:32:36
【问题描述】:

当我尝试编写一个小程序来预览 DjVu 文件时,我遇到了一个特殊的问题。这是一个将 DjVu 文档的页面渲染为 PyQt4 的 QImage 类的小函数。

import djvu.decode as DjVu
from PyQt4.QtCore import QImage
from PyQt4.QtGui import QPixmap, QApplication, QLabel

def djvu2pixmap( filename, width, height ) :
    doc = DjVu.Context().new_document( DjVu.FileURI( filename ) )
    doc.decoding_job.wait()
    pg = doc.pages[ 0 ]
    pg.decode( wait = True )
    data = pg.thumbnail.render( ( width, height ), DjVu.PixelFormatRgbMask( 0xff0000, 0xff00, 0xff, bpp = 32 ) )
    image = QIamge( data[ 1 ], data[ 0 ][ 0 ], data[ 0 ][ 1 ], QImage.Format_RGB32 )
    image.save( "/tmp/image.png" )
    return QPixmap.fromImage( image )

if __name__ == '__main__' :

    import sys

    app = QApplication( sys.argv )

    lbl = QLabel()
    lbl.setPixmap( djvu2pixmap( "trial.djvu" ), 200, 300 )
    lbl.show()
    lbl.resize( lbl.pixmap().size() )

    exit( app.exec_() )

现在假设我将图像宽度和高度设置为( 300, 500 ),程序崩溃并显示SegmentationFault。我也意识到图像没有问题。它确实得到了正确的保存。我只是无法显示它。不仅如此,我还可以毫无问题地打开保存的图像并显示它。我很好奇为什么会发生这种情况。

【问题讨论】:

    标签: python pyqt4 djvu


    【解决方案1】:

    您的 QPixmap 可能在您调用 lbl.setPixmap 后立即被删除。试试这个:

    pixmap = djvu2pixmap( "trial.djvu" )
    lbl.setPixmap( pixmap, 200, 300 )
    

    【讨论】:

      【解决方案2】:

      原来问题出在python-djvu 包上。 python-djvu 软件包的更新版本解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2012-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-08
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多