में एक बीएमपी फ़ाइल (बिटमैप) बनाना, मैं केवल कोड से सी में बिटमैप बनाने की कोशिश कर रहा हूं। मैं वर्तमान में सभी सफेद पिक्सेल के साथ 1px की ऊंचाई और 4 पिक्सेल की चौड़ाई के साथ एक बहुत ही आसान .bmp छवि बनाने की कोशिश कर रहा हूं। मैंने प्रारूप विवरण पढ़ा है और इसे लागू करने का प्रयास किया है। यह निम्न कोड में हुई:सी
char bitmap[1000];
void BMPmake()
{
// -- FILE HEADER -- //
// bitmap signature
bitmap[0] = 'B';
bitmap[1] = 'M';
// file size
bitmap[2] = 66; // 40 + 14 + 12
bitmap[3] = 0;
bitmap[4] = 0;
bitmap[5] = 0;
// reserved field (in hex. 00 00 00 00)
for(int i = 6; i < 10; i++) bitmap[i] = 0;
// offset of pixel data inside the image
for(int i = 10; i < 14; i++) bitmap[i] = 0;
// -- BITMAP HEADER -- //
// header size
bitmap[14] = 40;
for(int i = 15; i < 18; i++) bitmap[i] = 0;
// width of the image
bitmap[18] = 4;
for(int i = 19; i < 22; i++) bitmap[i] = 0;
// height of the image
bitmap[22] = 1;
for(int i = 23; i < 26; i++) bitmap[i] = 0;
// reserved field
bitmap[26] = 1;
bitmap[27] = 0;
// number of bits per pixel
bitmap[28] = 24; // 3 byte
bitmap[29] = 0;
// compression method (no compression here)
for(int i = 30; i < 34; i++) bitmap[i] = 0;
// size of pixel data
bitmap[34] = 12; // 12 bits => 4 pixels
bitmap[35] = 0;
bitmap[36] = 0;
bitmap[37] = 0;
// horizontal resolution of the image - pixels per meter (2835)
bitmap[38] = 0;
bitmap[39] = 0;
bitmap[40] = 0b00110000;
bitmap[41] = 0b10110001;
// vertical resolution of the image - pixels per meter (2835)
bitmap[42] = 0;
bitmap[43] = 0;
bitmap[44] = 0b00110000;
bitmap[45] = 0b10110001;
// color pallette information
for(int i = 46; i < 50; i++) bitmap[i] = 0;
// number of important colors
for(int i = 50; i < 54; i++) bitmap[i] = 0;
// -- PIXEL DATA -- //
for(int i = 54; i < 66; i++) bitmap[i] = 0;
}
void BMPwrite()
{
FILE *file;
file = fopen("bitmap.bmp", "w+");
for(int i = 0; i < 66; i++)
{
fputc(bitmap[i], file);
}
fclose(file);
}
जब मैं इस छवि को खोलने का प्रयास है, यह कहना है कि छवि क्षतिग्रस्त है। क्या मुझसे कोई चूक हो रही है?
मैंने यह भी देखा कि .bmp पूर्णांक का एन्कोडिंग थोड़ा अंतराल है। मैंने सोचा कि इसका मतलब है कि मुझे बाइट्स के क्रम को पीछे हटाना है। उदाहरण के लिए, चार बाइट्स में 256 है: 00000000 00000000 00000001 00000000, और मुझे लगता है कि थोड़ा एंडियन में यह होगा: 00000000 00000001 00000000 00000000
क्या कोई मुझे यहां एक हाथ दे सकता है? क्या मैं सही दृष्टिकोण का उपयोग कर रहा हूं? किसी भी सहायता की सराहना की जाएगी!
अग्रिम धन्यवाद!
एक ऐसी छवि बनाएं जिसे आप अपने पसंदीदा ग्राफिक संपादक का उपयोग करके जेनरेट करना चाहते हैं, और फिर इसे बाइट-फॉर-बाइट को दोहराने का प्रयास करें। – dasblinkenlight
आपको संकल्प फ़ील्ड पर अंतहीनता मिली है। यदि आप 2-बाइट और 4-बाइट पूर्णांक लेने के लिए सहायक कार्यों को लिखते हैं और उन्हें आपके बाइट सरणी में पैक करते हैं तो आपको अपना काम अधिक आसान लगेगा। –
dasblinkenlight, मैंने पिक्सेलमेटर (मैक पर) करने की कोशिश की है, लेकिन मुझे 84 बाइट्स की एक बीएमपी फ़ाइल मिली है, जबकि मुझे उम्मीद है कि यह 66 बाइट्स हो, शायद मैं इसे एक प्रोग्राम के साथ खोलने का प्रयास कर सकता हूं जो मुझे बाइट प्रति दिखाता है बाइट;) – Devos50