2017-12-27 654 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