我想在C中創建一個位圖灰度圖像。如果我將它設置爲24 => 3字節它的作品,但給我彩色圖像問題是每像素位。我想設置它8 => 1個字節,所以它產生灰度圖像。位圖8位灰度圖像在C
#include<stdio.h>
main() {
char bitmap[1000];
FILE *bp;
// -- FILE HEADER -- //
// bitmap signature
bitmap[0] = 0x42; // B
bitmap[1] = 0x4d; // M
// file size
bitmap[2] = 0x86; // 40 + 14 + 12 (134-66) = 68
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;
bitmap[10] = 54; // 54-36
// offset of pixel data inside the image
for (int i = 11; i < 14; i++) bitmap[i] = 0;
// -- BITMAP HEADER -- //
// header size
bitmap[14] = 0x28; // 40
for (int i = 15; i < 18; i++) bitmap[i] = 0;
// width of the image
bitmap[18] = 4; // 5
for (int i = 19; i < 22; i++) bitmap[i] = 0;
// height of the image
bitmap[22] = 1; // 5
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 24
bitmap[29] = 0;
// compression method (no compression here)
for (int i = 30; i < 34; i++) bitmap[i] = 0;
// size of pixel data
bitmap[34] = 24; // 12 bits => 4 pixels 80
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] = 0xC4; //48
bitmap[41] = 0x0E; //177
// vertical resolution of the image - pixels per meter (2835)
bitmap[42] = 0;
bitmap[43] = 0;
bitmap[44] = 0xC4;
bitmap[45] = 0x0E;
// color pallette information
for (int i = 46; i < 48; i++) bitmap[i] = 0;
// color pallette information
for (int i = 48; i < 50; i++) bitmap[i] = 0;
// number of important colors
for (int i = 50; i < 52; i++) bitmap[i] = 0;
// number of important colors
for (int i = 52; i < 54; i++) bitmap[i] = 0;
// -- PIXEL DATA -- //
for (int i = 54; i < 134; i++){
if (i %2 == 0)
bitmap[i] = 0xFF;
else bitmap[i] = 0;
}
/*bitmap[54] =1; bitmap[55] = 1; bitmap[56] = 0;
bitmap[57] = 1; bitmap[58] = 1; bitmap[59] = 0;
bitmap[60] = 1; bitmap[61] = 1; bitmap[62] = 0;
bitmap[63] = 1; bitmap[64] = 1; bitmap[65] = 0;*/
bp = fopen("e://binary.bmp", "wb");
for (int i = 0; i < 134; i++) {
fprintf(bp, "%c", bitmap[i]);
}
fclose(bp);
}
你真的很難編碼這個。正常的方法是填充BITMAPINFO結構並將其寫入一次。 –
只是使所有的顏色(rgb)相同... –
另一件事我該如何增加圖像的高度和寬度!如果我將寬度從4更改爲其他數字,圖像與高度不一樣! – ahsanic