PyQt4 pythondjvulibre分段Fau

2024-07-02 04:39:05 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图编写一个预览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崩溃。我也意识到这张照片没有问题。它确实保存得很好。我就是不能展示。不仅如此,我还可以打开保存的图像并显示出来。我很好奇为什么会这样。在


Tags: fromimageimport程序datadocpgdecode
2条回答

有可能你的QPixmap会在你打电话后立即被删除lbl.setPixmap. 试试这个:

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

原来问题出在python-djvu包中。python-djvu包的更新版本解决了此问题。在

相关问题 更多 >