2009-12-28 19 views
5

मुझे एक बीएमपी छवि पढ़ने के लिए एक प्रश्न मिला। मैं एक बीएमपी छवि में पिक्सेल मान (आर, जी, बी मान) कैसे प्राप्त कर सकता हूं? कोई भी प्रोग्रामिंग भाषा का उपयोग कर मेरी मदद कर सकता है?बीएमपी फ़ाइल का पिक्सेल मान प्राप्त करना

उत्तर

7

आपके चुने हुए प्लेटफ़ॉर्म के लिए एक अच्छी छवि मैनिपुलेशन लाइब्रेरी ढूंढना और इसका उपयोग करना आसान तरीका है।

  • लिनक्सImLib/GDK-Pixbuf (Gnome/GTK)/QT Image (KDE/Qt) आपको क्या चाहिए ऐसा करने में सक्षम होना चाहिए।
  • विंडोज मैं उपयुक्त सिस्टम लाइब्रेरी से परिचित नहीं हूं, लेकिन MSDN Search for "Bitmap" शायद शुरू करने के लिए एक अच्छी जगह है।
  • मैक ओएसएक्स कोको में कुछ छवि मैनिपुलेशन क्षमताएं हैं, this article देखें।

फ़ाइल खोलने और वास्तव में बाइनरी डेटा की व्याख्या करने का कठिन तरीका होगा। ऐसा करने के लिए आपको की आवश्यकता होगी। मैं पहले आसान तरीका कोशिश करने की सिफारिश करेंगे।

6

आपको बीएमपी फ़ाइल प्रारूप का अध्ययन करने की आवश्यकता है। 24-बिट बीएमपी फ़ाइलों को असंपीड़ित करना आसान है। वे प्रत्येक पिक्सेल की शुरुआत और आरजीबी मूल्यों में केवल एक शीर्षलेख रखते हैं।

इसके साथ शुरू करने के लिए, 0xपर 2x2 बिटमैप छवि का उदाहरण देखें। नीचे दिए गए चरणों का पालन करें।

  1. विकिपीडिया पर दिखाए गए 2x2 बीएमपी छवि बनाएं।
  2. फ़ाइल को अपने सी प्रोग्राम का उपयोग करके बाइनरी मोड में खोलें।
  3. बाइट स्थिति 54.
  4. 3 बाइट पढ़ें।

बाइट क्रमशः 0, 0 और 255 होंगे। (यह सुनिश्चित नहीं है कि ऑर्डर आरजीबी है या नहीं। मैंने यह लंबे समय से किया था और मुझे लगता है कि ऑर्डर आरजीबी नहीं है। बस इसे सत्यापित करें।)

उतना सरल! प्रारूप के बारे में अधिक समझने के लिए बीएमपी के शीर्षलेख का अध्ययन करें।

10

नोट: यदि आपके बीएमपी में अल्फा चैनल है तो आपको अल्फा मानों के लिए अतिरिक्त बाइट पकड़ने की आवश्यकता हो सकती है। उस स्थिति में छवि image[pixelcount][4] होगी, और आप उस चौथी अनुक्रमणिका को पकड़ने के लिए एक और getc(streamIn) लाइन जोड़ देंगे। मेरी बीएमपी की आवश्यकता नहीं है।

// super-simplified BMP read algorithm to pull out RGB data 
// read image for coloring scheme 
int image[1024][3]; // first number here is 1024 pixels in my image, 3 is for RGB values 
FILE *streamIn; 
streamIn = fopen("./mybitmap.bmp", "r"); 
if (streamIn == (FILE *)0){ 
    printf("File opening error ocurred. Exiting program.\n"); 
    exit(0); 
} 

int byte; 
int count = 0; 
for(i=0;i<54;i++) byte = getc(streamIn); // strip out BMP header 

for(i=0;i<1024;i++){ // foreach pixel 
    image[i][2] = getc(streamIn); // use BMP 24bit with no alpha channel 
    image[i][1] = getc(streamIn); // BMP uses BGR but we want RGB, grab byte-by-byte 
    image[i][0] = getc(streamIn); // reverse-order array indexing fixes RGB issue... 
    printf("pixel %d : [%d,%d,%d]\n",i+1,image[i][0],image[i][1],image[i][2]); 
} 

fclose(streamIn); 

~ Locutus

+0

वहाँ एक हैडर हिस्सा आप इससे पहले कि आप छवि डेटा मारा अतीत प्राप्त करने की आवश्यकता नहीं है? –

+1

@Anon क्या होगा यदि मेरी फ़ाइल jpeg है? – Kraken

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