2011-03-18 12 views
5

क्या किसी विशिष्ट पथ में पीएनजी फ़ाइल के आयाम प्राप्त करने का कोई तरीका है? मुझे फ़ाइल लोड करने की आवश्यकता नहीं है, मुझे डायरेक्टएक्स में एक बनावट लोड करने के लिए चौड़ाई और ऊंचाई की आवश्यकता है।सी ++ एक पीएनजी फ़ाइल (निर्देशिका में) का छवि आकार कैसे प्राप्त करें

उत्तर

7

चौड़ाई फ़ाइल में ऑफ़सेट 16 से शुरू होने वाली 4-बाइट पूर्णांक है। ऊंचाई ऑफसेट 20 से शुरू होने वाला एक और 4-बाइट पूर्णांक है। वे दोनों नेटवर्क ऑर्डर में हैं, इसलिए आपको सही तरीके से व्याख्या करने के लिए होस्ट ऑर्डर में कनवर्ट करने की आवश्यकता है।

#include <fstream> 
#include <iostream> 
#include <winsock.h> 

int main(int argc, char **argv) { 
    std::ifstream in(argv[1]); 
    unsigned int width, height; 

    in.seekg(16); 
    in.read((char *)&width, 4); 
    in.read((char *)&height, 4); 

    width = ntohl(width); 
    height = ntohl(height); 

    std::cout << argv[1] << " is " << width << " pixels wide and " << height << " pixels high.\n"; 
    return 0; 
} 
3

छवि का आकार, शीर्षक में स्थित है तो आप फ़ाइल को लोड और हैडर पार्स करने के लिए की आवश्यकता होगी (और मैं नहीं है किसी भी तीसरे पक्ष के-libs उपयोग करना चाहते हैं)।

इसलिए, चूंकि आप किसी तृतीय पक्ष लाइब्रेरी का उपयोग नहीं करना चाहते हैं, तो आप हमेशा पीएनजी चश्मे की जांच कर सकते हैं और अपना खुद का पार्सर लागू कर सकते हैं।

+0

धन्यवाद, बीमार कोशिश करें कि –

1

आप हमेशा फ़ाइल को मैन्युअल रूप से डीकोड कर सकते हैं और बस उस बिट्स को ढूंढ सकते हैं जिसमें आप रुचि रखते हैं। Here's a link to an article about PNG file formats.। आप आईएचडीआर खंड की तलाश में हैं और इसमें चौड़ाई और ऊंचाई शामिल है। यह फ़ाइल में डेटा का पहला हिस्सा होना चाहिए, इसलिए इसे प्राप्त करना काफी आसान होना चाहिए।

6

नहीं, आप फ़ाइल के हिस्से को पढ़ने के बिना इसे नहीं कर सकते हैं। सौभाग्य से, फ़ाइल हेडर पर्याप्त सरल हैं कि आप उन्हें लाइब्रेरी के बिना पढ़ सकते हैं, अगर आपको वास्तविक छवि डेटा पढ़ने की आवश्यकता नहीं है।

यदि आप सुनिश्चित हैं कि आपके पास एक वैध पीएनजी फ़ाइल है, तो आप ऑफसेट 16 और 20 (4 बाइट्स प्रत्येक, बड़े-एंडियन) से चौड़ाई और ऊंचाई पढ़ सकते हैं, लेकिन यह सत्यापित करना भी एक अच्छा विचार हो सकता है फ़ाइल के पहले 8 बाइट बिल्कुल "89 50 4 ई 47 0 डी 0 ए 1 ए 0 ए" (हेक्स) हैं और बाइट 12-15 बिल्कुल "49 48 44 52" ("ASCII में" IHDR ") हैं।

+0

यह काम करता है !! वास्तव में धन्यवाद –

संबंधित मुद्दे