簡體   English   中英

PyQt4-python-djvulibre分段錯誤

[英]PyQt4 - python-djvulibre Segmentation Fault

當我嘗試編寫一個小的程序來預覽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崩潰。 我也意識到圖像沒有問題。 它確實得到正確保存。 我只是無法顯示它。 不僅如此,我還可以打開保存的圖像並顯示它,沒有任何問題。 我很好奇為什么會這樣。

調用lbl.setPixmap后,可能會立即刪除QPixmap。 嘗試以下方法:

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

原來,問題出在python-djvu軟件包。 更高版本的python-djvu軟件包解決了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM