2017-12-27 306 views
0

我使用掃描儀。掃描儀輸出採用tiff或pnm格式。但我無法將這些格式加載到QImage中。如何將tiff或pnm轉換爲Qt中的jpeg

QProcess process; 
process.start("scanimage -d epjitsu --format=tiff"); 
process.waitForFinished(240000); 
QByteArray ba = process.readAllStandardOutput(); 
QImage image; 
image.fromData(ba); 

image.fromData(ba)將失敗,因爲Qt不知道tiff格式。只有這樣,如何轉換它,是將bytearray存儲到文件並使用linux實用程序轉換來轉換它。但我不想這樣走。我想在Qt中以某種方式做它。

+0

根據tiff支持的文檔:http://doc.qt.io/qt-5/qtimageformats-index.html – eyllanesc

+0

這可能是qt配置爲使用系統ti的情況如果支持,但它不存在。這就是我喜歡定製qt構建的原因,即捆綁圖像格式只是爲了安全起見。 – dtech

+0

我已經多次閱讀過Qt文檔。但我不會使用它。如果我想在CentOS和Ubuntu上使用它,我應該怎麼做? –

回答

0

你可以使用GDAL來打開tiff文件,並且他們創建一個QImage。這個QImage可以保存爲jpg格式。

0

Qt通過libtiff提供了tiff支持。

我認爲默認配置選項是它使用任何系統提供的。這意味着你的系統應該安裝libtiff。

您還可以在其中提供-qt-libtiff配置標誌的自定義qt構建,該標誌將使用捆綁的lib將其合併到qt二進制文件中,而不是使用外部系統庫。

另一個要考慮的問題是,tiff支持不在「Qt Essentials」模塊中,而是在Qt Image Formats模塊面板中的「Qt附加組件」的一部分。

最後,您仍然可以選擇掃描到文件,然後通過外部工具將文件轉換爲支持的格式。

+0

我必須使用此選項構建我的項目,否則我必須下載Qt資源並使用此選項構建它? –

+0

@PeterPolak是否爲您提供'QImageReader :: supportedImageFormats()'list tiff? – dtech

+0

我在那裏看到tiff。但是,如果我將數據從QByteArray加載到QImage,QImage對象會保存無效的圖片。 –

0

qt知道tiff格式。下面的代碼對我的作品:

QFile f("Untitled.tiff"); 
if (!f.open(QIODevice::ReadOnly)) { 
    return; 
} 
QByteArray ar(f.size(), ' '); 
f.read(ar.data(), ar.size()); 
QImage img; 

img.loadFromData(ar); 
if (!img.isNull()) 
{ 
    QPixmap image = QPixmap::fromImage(img); 
    ui.tiffLabel->setFixedSize(img.size()); 
    ui.tiffLabel->setPixmap(image); 
} 

確保您滿足所有的DLL依賴(我supect qtiff.dll)

確保您QByteArray ba包含圖像

和,可能是好主意使用loadFromData insted fromData