बीएमपी छवि का प्रत्येक पिक्सेल आरजीबी मॉडल (छवि का रंग मॉडल, जिसमें तीन घटक आर - लाल, जी - हरा, बी - नीला) होते हैं, से उसके रंग के बारे में जानकारी होती है। आरजीबी रंग मान को हेक्स प्रारूप (हेक्साडेसिमल) में संग्रहीत करना अधिक सुविधाजनक है, जहां प्रत्येक घटक का मान 00… FF की सीमा में है। संयोजन 000000 काले रंग से मेल खाता है, FFFFFF - सफेद से।
आरंभ करने के लिए, ड्रॉइंग नेमस्पेस खोलें:
System. Drawing का उपयोग करना;
आइए बिटमैप वर्ग का एक नया उदाहरण बनाएं:
बिटमैप बीएमपी = नया बिटमैप ("सी: / 1.बीएमपी") // सी: / 1.बीएमपी - छवि पता
पिक्सेल रंग मान को संग्रहीत करने के लिए, आप एक अलग संरचना बना सकते हैं, जिसके क्षेत्र RGB घटक हैं, लेकिन मैंने ड्रॉइंग नेमस्पेस से रंग वर्ग का उपयोग करने का निर्णय लिया। रंग प्राप्त करने के लिए, हम GetPixel (x, y) विधि का उपयोग करते हैं, जहां x, y छवि पिक्सेल के निर्देशांक हैं। यदि आप रंग वर्ग के उदाहरण के बजाय रंग को स्टोर करने के लिए अपनी संरचना का उपयोग करना चाहते हैं, तो आप bmp. GetPixel (x, y).x विधि का उपयोग एकल RGB घटक प्राप्त करने के लिए कर सकते हैं, जहाँ x R है, जी, या बी.
रंग [,] रंग = नया रंग [बीएमपी। चौड़ाई, बीएमपी। ऊंचाई];
के लिए (int y = 0; y <bmp. Height; y ++)
के लिए (int x = 0; x <bmp. Width; x ++)
{
रंग [x, y] = bmp. GetPixel (x, y);
}
किसी फ़ाइल में रंग मान लिखने के लिए, हम StreamWriter वर्ग का उपयोग करते हैं। चूंकि रंग उदाहरण के आर, जी, बी तत्व बाइट प्रकार के होते हैं, हम उन्हें ToString ("X2") विधि का उपयोग करके एक स्ट्रिंग प्रकार में परिवर्तित करते हैं जो आरजीबी तत्वों के हेक्स मानों को संग्रहीत करेगा।
StreamWriter SteamWriter = नया StreamWriter ("c: / 1.txt");
के लिए (int y = 0; y <bmp. Height; y ++)
{
के लिए (int x = 0; x <bmp. Width; x ++)
{
स्टीमराइटर। लिखें (रंग [x, y]. R. ToString ("X2"));
स्टीमराइटर। लिखें (रंग [x, y]. G. ToString ("X2"));
स्टीमराइटर। लिखें (रंग [x, y]. B. ToString ("X2") + ");
}
स्टीमराइटर। राइटलाइन ();
}
स्टीमराइटर। बंद करें ();
अब रिवर्स ऑपरेशन करते हैं - परिणामी टेक्स्ट फ़ाइल को एक इमेज में बदलें।
StreamReader की मदद से हम फाइल से जानकारी पढ़ते हैं।
StreamReader txtFile = नया StreamReader ("c: / 1.txt");
हम छवि की चौड़ाई और ऊंचाई की गणना करते हैं। चूंकि प्रत्येक पिक्सेल में 6 वर्ण और 1 गैप होता है, और अंत में कोई गैप नहीं होता है, हम चौड़ाई की गणना के लिए निम्न सूत्र का उपयोग करते हैं:
अस्थायी = txtFile. ReadLine ();
चौड़ाई = (अस्थायी लंबाई + 1) / 7;
छवि की ऊंचाई फ़ाइल में पंक्तियों की संख्या है:
जबकि (! txtFile. EndOfStream)
{
txtFile. ReadLine ();
ऊंचाई ++;
}
ऊंचाई ++;
फ़ाइल में रीड पॉइंटर को शुरुआत में ले जाएँ:
txtFile. DiscardBufferedData ();
बिटमैप वर्ग का एक नया उदाहरण बनाएँ:
बिटमैप bmp2 = नया बिटमैप (चौड़ाई, ऊंचाई);
विभाजन विधि का उपयोग करके, हम मैट्रिक्स के तत्वों को विभाजित करते हैं। हम बाइट प्रकार के तीन चर घोषित करते हैं - आर, जी, बी। पार्स और सबस्ट्रिंग विधियों का उपयोग करके, रंग तत्वों को अलग से चुनें।
छवि में पिक्सेल को इस रंग से भरने के लिए, SetPixel (j, i, Color. FromArgb (R, G, B)) विधि का उपयोग करें, जहाँ j, i छवि निर्देशांक हैं, Color. FromArgb (R, G, B)) वह विधि है जो संरचना रंग बनाती है।
के लिए (int i = 0; i <ऊंचाई; i + +)
{
अस्थायी = txtFile2. ReadLine ();
स्ट्रिंग सबस्ट्रिंग = अस्थायी। स्प्लिट ('');
के लिए (इंट जे = 0; जे <चौड़ाई; जे + +)
{
आर = बाइट। पार्स (सबस्ट्रिंग [जे]। सबस्ट्रिंग (0, 2), System. Globalization. NumberStyles. HexNumber)
जी = बाइट। पार्स (सबस्ट्रिंग [जे]। सबस्ट्रिंग (2, 2), System. Globalization. NumberStyles. HexNumber)
बी = बाइट। पार्स (सबस्ट्रिंग [जे]। सबस्ट्रिंग (4, 2),
System. Globalization. NumberStyles. HexNumber)
bmp2. SetPixel (j, i, Color. FromArgb (R, G, B));
}
}
अब आप इमेज को सेव कर सकते हैं। यदि आप WindowsForm में काम कर रहे हैं तो आप SaveFileDialog क्लास का उपयोग कर सकते हैं:
SaveFileDialog saveImage = नया SaveFileDialog ();
saveImage. Filter = बीएमपी फाइलें (*। बीएमपी) | *। बीएमपी | सभी फाइलें (*। *)
| *. * ;
saveImage. ShowDialog ();
bmp2. Save (saveImage. FileName);