C++ 创建位图文件的程序
我的代码有一个问题,它是.bmp文件的生成器,没有任何库来生成文件 程序生成一个空白图像,即使有像素数据。我试图更改字节,但没有成功 有什么想法吗?谢谢C++中的代码.< /p> 代码:C++ 创建位图文件的程序,c++,C++,我的代码有一个问题,它是.bmp文件的生成器,没有任何库来生成文件 程序生成一个空白图像,即使有像素数据。我试图更改字节,但没有成功 有什么想法吗?谢谢C++中的代码.< /p> 代码: #包括 #包括 #包括 使用名称空间std; #定义每像素3的字节数 #定义文件头大小14 #定义信息标题大小40 结构BITMAPFILEHEADER{ 无符号短类型; 无符号整数; 未签名的短bfReserved1; 未签名的短bfReserved2; 无符号整数位; }; 结构BitMapInfo标头{
#包括
#包括
#包括
使用名称空间std;
#定义每像素3的字节数
#定义文件头大小14
#定义信息标题大小40
结构BITMAPFILEHEADER{
无符号短类型;
无符号整数;
未签名的短bfReserved1;
未签名的短bfReserved2;
无符号整数位;
};
结构BitMapInfo标头{
无符号整型;
无符号整数双宽度;
无符号整数;
无符号短双翼飞机;
无符号短双比特计数;
无符号整数双压缩;
无符号int-biSizeImage;
无符号int-biXPelsPerMeter;
无符号整数双对数渗透计;
不带符号的整数;
无符号整数;
};
结构RGB_数据{
无符号字符b;
无符号字符g;
无符号字符r;
};
int main(){
尺寸和高度=100;
尺寸/宽度=50;
尺寸=宽度*高度*3;
//------------------------------------------------------------------------------
FILE*FILE=fopen(“./sample.bmp”,“wb”);
//------------------------------------------------------------------------------
位图文件头bmfh;
位图信息头;
//------------------------------------------------------------------------------
RGB_数据缓冲区[高度][宽度];
对于(int y=0;y 您不能在这里初始化g
值
data.b = 0;
data.r = 0;
data.b = 0;
并且在第一个结构的开头包含#pragma pack(push,1)
,在最后一个结构的结尾包含#pragma pack(pop)
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
#define BYTES_PER_PIXEL 3
#define FILE_HEADER_SIZE 14
#define INFO_HEADER_SIZE 40
#pragma pack(push, 1)
struct BITMAPFILEHEADER {
unsigned short bfType;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
};
struct BITMAPINFOHEADER {
unsigned int biSize;
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
unsigned int biXPelsPerMeter;
unsigned int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};
struct RGB_data {
unsigned char b;
unsigned char g;
unsigned char r;
};
#pragma pack(pop)
int main() {
size_t height = 100;
size_t width = 50;
size_t size = width * height * 3;
//------------------------------------------------------------------------------
FILE *file = fopen("./sample.bmp", "wb");
//------------------------------------------------------------------------------
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
//------------------------------------------------------------------------------
RGB_data buffer[height][width];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
RGB_data data;
data.b = 0;
data.r = 0;
data.b = 0;
buffer[y][x] = data;
}
}
//------------------------------------------------------------------------------
bmfh.bfType = 0x4D42;
bmfh.bfSize = size + FILE_HEADER_SIZE + INFO_HEADER_SIZE;
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = bmfh.bfSize - size;
//------------------------------------------------------------------------------
bmih.biSize = 40;
bmih.biWidth = width;
bmih.biHeight = height;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biCompression = 0;
bmih.biSizeImage = size;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 0;
bmih.biClrImportant = 0;
//------------------------------------------------------------------------------
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
buffer[y][x].b = 10;
buffer[y][x].r = 20;
buffer[y][x].g = 30;
}
}
//------------------------------------------------------------------------------
fwrite(&bmfh, 1, FILE_HEADER_SIZE, file);
fwrite(&bmih, 1, INFO_HEADER_SIZE, file);
fwrite(&buffer, 3, size, file);
fclose(file);
//------------------------------------------------------------------------------
cout << "Image generated successfully!" << endl;
return 0;
}
#包括
#包括
#包括
使用名称空间std;
#定义每像素3的字节数
#定义文件头大小14
#定义信息标题大小40
#pragma包(推送,1)
结构BITMAPFILEHEADER{
无符号短类型;
无符号整数;
未签名的短bfReserved1;
未签名的短bfReserved2;
无符号整数位;
};
结构BitMapInfo标头{
无符号整型;
无符号整数双宽度;
无符号整数;
无符号短双翼飞机;
无符号短双比特计数;
无符号整数双压缩;
无符号int-biSizeImage;
无符号int-biXPelsPerMeter;
无符号整数双对数渗透计;
不带符号的整数;
无符号整数;
};
结构RGB_数据{
无符号字符b;
无符号字符g;
无符号字符r;
};
#布拉格语包(流行语)
int main(){
尺寸和高度=100;
尺寸/宽度=50;
尺寸=宽度*高度*3;
//------------------------------------------------------------------------------
FILE*FILE=fopen(“./sample.bmp”,“wb”);
//------------------------------------------------------------------------------
位图文件头bmfh;
位图信息头;
//------------------------------------------------------------------------------
RGB_数据缓冲区[高度][宽度];
对于(int y=0;y#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
#define BYTES_PER_PIXEL 3
#define FILE_HEADER_SIZE 14
#define INFO_HEADER_SIZE 40
#pragma pack(push, 1)
struct BITMAPFILEHEADER {
unsigned short bfType;
unsigned int bfSize;
unsigned short bfReserved1;
unsigned short bfReserved2;
unsigned int bfOffBits;
};
struct BITMAPINFOHEADER {
unsigned int biSize;
unsigned int biWidth;
unsigned int biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned int biCompression;
unsigned int biSizeImage;
unsigned int biXPelsPerMeter;
unsigned int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};
struct RGB_data {
unsigned char b;
unsigned char g;
unsigned char r;
};
#pragma pack(pop)
int main() {
size_t height = 100;
size_t width = 50;
size_t size = width * height * 3;
//------------------------------------------------------------------------------
FILE *file = fopen("./sample.bmp", "wb");
//------------------------------------------------------------------------------
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;
//------------------------------------------------------------------------------
RGB_data buffer[height][width];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
RGB_data data;
data.b = 0;
data.r = 0;
data.b = 0;
buffer[y][x] = data;
}
}
//------------------------------------------------------------------------------
bmfh.bfType = 0x4D42;
bmfh.bfSize = size + FILE_HEADER_SIZE + INFO_HEADER_SIZE;
bmfh.bfReserved1 = 0;
bmfh.bfReserved2 = 0;
bmfh.bfOffBits = bmfh.bfSize - size;
//------------------------------------------------------------------------------
bmih.biSize = 40;
bmih.biWidth = width;
bmih.biHeight = height;
bmih.biPlanes = 1;
bmih.biBitCount = 24;
bmih.biCompression = 0;
bmih.biSizeImage = size;
bmih.biXPelsPerMeter = 0;
bmih.biYPelsPerMeter = 0;
bmih.biClrUsed = 0;
bmih.biClrImportant = 0;
//------------------------------------------------------------------------------
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
buffer[y][x].b = 10;
buffer[y][x].r = 20;
buffer[y][x].g = 30;
}
}
//------------------------------------------------------------------------------
fwrite(&bmfh, 1, FILE_HEADER_SIZE, file);
fwrite(&bmih, 1, INFO_HEADER_SIZE, file);
fwrite(&buffer, 3, size, file);
fclose(file);
//------------------------------------------------------------------------------
cout << "Image generated successfully!" << endl;
return 0;
}