2012-11-27 9 views
6

मुझे अपने प्रोग्राम से एक बहुपक्षीय टीआईएफएफ सहेजने की ज़रूरत है, लेकिन ऐसा लगता है कि Qt doesn't support multipage TIFF। फिर भी, मुझे यह करने की ज़रूरत है। मेरे कार्यक्रम से इसे करने का सबसे अच्छा तरीका क्या होगा?क्यूटी मल्टीपाज टीआईएफएफ

अब तक, मैं छवि जेगिक की कमांड लाइन उपयोगिता का उपयोग करने के बारे में सोच रहा हूं ताकि मैं अपनी जेपीईजी फाइलों से बहुसंख्यक टीआईएफएफ बना सकूं, या अपनी परियोजना में libtiff जोड़ रहा हूं और इसका उपयोग करने की कोशिश कर रहा हूं, या जीडीआई + (विंडोज़ पर कम से कम) का उपयोग कर रहा हूं। टीआईएफएफ उत्पन्न करने के लिए।

कोई अन्य विचार जो मैंने याद किया होगा?

यदि संभव हो तो मैं बाह्य EXEs या DLLs का उपयोग करना टालना चाहूंगा, यानी यदि मैं सीधे अपने प्रोजेक्ट के स्रोत कोड में लाइब्रेरी जोड़ सकता हूं तो यह सबसे अच्छा होगा।

इसके अलावा, अगर आप पहले से ही एक परियोजना के बारे में जानते हैं, तो कृपया इसे एक लिंक पोस्ट करें, मैं पहिया को फिर से नहीं खोलूंगा।

उत्तर

5

क्यूटी libtiff का उपयोग टीआईएफएफ पढ़ने और लिखने के लिए करता है। तो मैं एक ही लाइब्रेरी का उपयोग करता हूं, केवल कम सिरदर्द। दूसरा: क्यूटी एक QImage लिखने के बारे में एक सुराग प्राप्त करने के लिए http://qt.gitorious.org/qt/qt/blobs/4.8/src/gui/image/qtiffhandler.cpp देखें। एकाधिक पृष्ठों का समर्थन करने के लिए मुझे लगता है कि आपको TIFFSetField() (here, TIFFTAG_PAGENAME और TIFFTAG_PAGENUMBER देखें) का उपयोग करने की आवश्यकता है। मैं या तो write() function का विस्तार करना शुरू कर दूंगा या कुछ ऐसा लिखूंगा, जहां आप:

  • TIFFClientOpen(); QImage
  • प्रति
  • बातें QTiffHandler :: लिखने करना() पेज सेट QImages
    • की एक सूची से अधिक
    • पुनरावृति करता
  • TIFFClose();

यह भी देखें: http://code.google.com/p/multiphoton/source/browse/MatroxImagingLibrary.cpp?#1628

+0

बढ़िया! मुझे नहीं पता था कि क्यूटी पहले से ही libtiff का उपयोग करता है। हालांकि मैं इसे कैसे प्राप्त करूं? बस '# शामिल "टिफियो जोड़ना।एच "' मुझे ऐसी कोई फ़ाइल या निर्देशिका नहीं देता है। – sashoalm

+0

libtiff 'src/3rdparty/libtiff/libtiff' फ़ोल्डर में पाया जा सकता है। इसे शामिल करने के लिए यह आपके और आपके प्रोजेक्ट स्ट्रक्चर पर थोड़ा सा है। – akira

+0

मैं सोच रहा था कि क्या चूंकि क्यूटी पहले से ही libtiff से जुड़ा हुआ है, इसलिए मैं अपनी खुद की प्रोजेक्ट में इसे आयात किए बिना libtiff का उपयोग नहीं कर सका, बल्कि, मैं हेडर और lib फ़ाइलों का उपयोग करूंगा जो Qt के साथ बनाया गया है। लेकिन शायद उन शीर्षलेखों और lib फ़ाइलों के लिए उपलब्ध नहीं है मेरा प्रोग्राम – sashoalm

6

बस एक समान विषय पर मेरी जानकारी जोड़ना चाहते थे। मैं नवीनतम (4.0.3) स्रोत से libtiff बनाने के लिए समाप्त हो गया। मेरे परियोजना सभी 64 में है, लेकिन यह बहुत आसान था: 64 के लिए

  1. डाउनलोड करें और अनज़िप libTIFF स्रोत
  2. ओपन VS2010 (या जो भी) (या x32) अपने अनज़िप हुए फ़ोल्डर को cmd से
  3. सीडी चरण 1
  4. प्रकार: nmake/च makefile.vc
  5. /libtiff फ़ोल्डर से फ़ाइलें प्राप्त करें और अपनी परियोजना

में जोड़ने के लिए यहाँ की पढ़ने 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); 
} 

सूत्रों का कहना है: वी.एस. से बिल्डिंग libTIFF - http://www.remotesensing.org/libtiff/build.html#PC

उदाहरण MultiPage TIFF - http://www.remotesensing.org/libtiff/libtiff.html

विविध। टिफ मैनुअल - http://www.remotesensing.org/libtiff/man/