Как писать 24 бит формат bmp заголовок высота=480 ширина=752 с использованием языка C
привет всем этот код предназначен для записи изображения высотой 8bpp и шириной, равной 20*20
на самом деле я хочу сделать эту структуру заголовка для 24bpp и height =480 и width=752 может ли кто-нибудь помочь мне сделать это .
#включать
unsigned char bitmap[1300];
пустота BMPmake()
{
int i,noColor=256,end_color=54+4*noColor;
статический unsigned char temp=0;
// -- ЗАГОЛОВОК ФАЙЛА -- //
// растровое изображение подписи
растровое изображение[0] = 'B';
растровое изображение[1] = 'M';
// размер файла
растровое изображение[2] = 0xc6; // 40 + 14 + 256*4+400
растровое изображение[3] = 0x05;
растровое изображение[4] = 0;
растровое изображение[5] = 0;
// зарезервированное поле (в шестнадцатеричном формате. 00 00 00 00)
для( i = 6; i 400 пикселей ,,,, 20x20x1
bitmap[35] = 0x01;//0x190
растровое изображение[36] = 0;
растровое изображение[37] = 0;
// горизонтальное разрешение изображения - пикселы на метр (2835)
растровое изображение[38] = 0;
растровое изображение[39] = 0;
растровое изображение[40] = 0;
растровое изображение[41] = 0;
// вертикальное разрешение изображения - пикселы на метр (2835)
растровое изображение[42] = 0;
растровое изображение[43] = 0;
растровое изображение[44] = 0;
растровое изображение[45] = 0;
// информация о цветовой палитре здесь 256
растровое изображение[46]=0;
растровое изображение[47]=1;
для( i = 48; i < 50; i++) растрового изображения[i] = 0;
// количество важных цветов
// если 0, то важны все цвета
для( i = 50; i < 54; i++) растрового изображения[i] = 0;
//цветовая палитра
//для менее чем 8-битного BMP-изображения мы должны создать цветовую палитру размером 4*noofcolor, которая является ничем иным, как
//[Синий][зеленый][красный][нулевые] значения
//для 8 бит мы имеем следующий код
для (i=54;i<end_color;i+=4)
{
растровое изображение[я]=темп;
растровое изображение[i+1]=temp;
растровое изображение[i+2]=temp;
растровое изображение[i+3]=0;
температура++;
}
// -- ПИКСЕЛЬНЫЕ ДАННЫЕ -- //
Для( я = end_color; я &л; end_color+400; я++) растрового изображения[Я] = значение 0xFF;
}
пустота BMPwrite()
{
Файл *файл;
int i;
//используйте wb+ при записи в двоичный файл, то есть в двоичной форме, тогда как w+ для txt-файла.
file = fopen("b.bmp", "wb+");
для( i = 0; i < 1478; i++)
{
fputc(bitmap[i], файл);
}
fclose(файл);
}
пустота главная()
{
BMPmake();
BMPwrite();
printf("готово!!");
}
Что я уже пробовал:
я попробовал, как показано ниже кода
#include unsigned char bitmap[1300]; void BMPmake() { int i,noColor=256,end_color=54+4*noColor; static unsigned char temp=0; // -- FILE HEADER -- // // bitmap signature bitmap[0] = 'B'; bitmap[1] = 'M'; // file size bitmap[2] = 0xc6; // 40 + 14 + 256*4+400 bitmap[3] = 0x05; bitmap[4] = 0; bitmap[5] = 0; // reserved field (in hex. 00 00 00 00) for( i = 6; i 400 pixels ,,,, 20x20x1 bitmap[35] = 0x01;//0x190 bitmap[36] = 0; bitmap[37] = 0; // horizontal resolution of the image - pixels per meter (2835) bitmap[38] = 0; bitmap[39] = 0; bitmap[40] = 0; bitmap[41] = 0; // vertical resolution of the image - pixels per meter (2835) bitmap[42] = 0; bitmap[43] = 0; bitmap[44] = 0; bitmap[45] = 0; // color palette information here 256 bitmap[46]=0; bitmap[47]=1; for( i = 48; i < 50; i++) bitmap[i] = 0; // number of important colors // if 0 then all colors are important for( i = 50; i < 54; i++) bitmap[i] = 0; //Color Palette //for less then or equal to 8 bit BMP Image we have to create a 4*noofcolor size color palette which is nothing but //[BLUE][GREEN][RED][ZERO] values //for 8 bit we have the following code for (i=54;i<end_color;i+=4) { bitmap[i]=temp; bitmap[i+1]=temp; bitmap[i+2]=temp; bitmap[i+3]=0; temp++; } // -- PIXEL DATA -- // for( i = end_color; i < end_color+400; i++) bitmap[i] = 0xff; } void BMPwrite() { FILE *file; int i; //use wb+ when writing to binary file .i.e. in binary form whereas w+ for txt file. file = fopen("b.bmp", "wb+"); for( i = 0; i < 1478; i++) { fputc(bitmap[i], file); } fclose(file); } void main() { BMPmake(); BMPwrite(); printf("Done!!"); }