sas*_*alm 6 c++ qt tiff libtiff
我需要从我的程序中保存多页TIFF,但似乎Qt不支持多页TIFF.不过,我需要这样做.从我的程序中做到这一点最好的方法是什么?
到目前为止,我正在考虑使用ImageMagick的命令行实用程序从我创建的许多JPEG文件创建多页TIFF,或者将libtiff添加到我的项目并尝试使用它,或者使用GDI +(至少在Windows上)生成TIFF .
我可能错过了任何其他想法?
如果可能的话,我想避免使用外部EXE或DLL,即如果我可以直接将库添加到我的项目的源代码中,那将是最好的.
此外,如果您知道已经完成的项目,请发布一个链接,我宁愿不重新发明轮子.
只是想在类似主题上添加我的信息.我最终只是从最新的(4.0.3)源代码构建了libTiff.我的项目都在x64中,但它非常简单:
以下是读取16位TIFF数据的示例:
TIFF *MultiPageTiff = TIFFOpen("C:\\MultiPageTiff.tif", "r");
std::vector<unsigned short*> SimulatedQueue;
//Read First TIFF to setup the Buffers and init
//everything
int Width, Height;
//Bit depth, in bits
unsigned short depth;
TIFFGetField(MultiPageTiff, TIFFTAG_IMAGEWIDTH, &Width);
TIFFGetField(MultiPageTiff, TIFFTAG_IMAGELENGTH, &Height);
TIFFGetField(MultiPageTiff, TIFFTAG_BITSPERSAMPLE, &depth);
//This should be Width*(depth / sizeof(char))
tsize_t ScanlineSizeBytes = TIFFScanlineSize(MultiPageTiff);
if(MultiPageTiff){
int dircount = 0;
do{
dircount++;
//I'm going to be QQueue'ing these up, so a buffer needs to be
//allocated per new TIFF page
unsigned short *Buffer = new unsigned short[Width*Height];
//Copy all the scan lines
for(int Row = 0; Row < Height; Row++){
TIFFReadScanline(MultiPageTiff, &Buffer[Row*Width], Row, 0);
}
SimulatedQueue.push_back(Buffer);
}while(TIFFReadDirectory(MultiPageTiff));
TIFFClose(MultiPageTiff);
}
Run Code Online (Sandbox Code Playgroud)
资料来源:从VS构建libTIFF - http://www.remotesensing.org/libtiff/build.html#PC
示例MultiPage TIFF - http://www.remotesensing.org/libtiff/libtiff.html
杂项.Tiff手册 - http://www.remotesensing.org/libtiff/man/
Qt 使用libtiff读写 TIFF。所以我会使用相同的库,只是少一些头痛。其次:查看http://qt.gitorious.org/qt/qt/blobs/4.8/src/gui/image/qtiffhandler.cpp以了解 Qt 如何编写一个 QImage 的线索。为了支持多个页面,我认为您需要使用TIFFSetField()(请参阅此处,TIFFTAG_PAGENAME 和 TIFFTAG_PAGENUMBER)。我将开始扩展write() 函数或编写类似的内容,其中您:
另请参阅:http://code.google.com/p/multiphoton/source/browse/MatroxImagingLibrary.cpp? #1628