C++ 创建位图文件的程序

C++ 创建位图文件的程序,c++,C++,我的代码有一个问题,它是.bmp文件的生成器,没有任何库来生成文件 程序生成一个空白图像,即使有像素数据。我试图更改字节,但没有成功 有什么想法吗?谢谢C++中的代码.< /p> 代码: #包括 #包括 #包括 使用名称空间std; #定义每像素3的字节数 #定义文件头大小14 #定义信息标题大小40 结构BITMAPFILEHEADER{ 无符号短类型; 无符号整数; 未签名的短bfReserved1; 未签名的短bfReserved2; 无符号整数位; }; 结构BitMapInfo标头{

我的代码有一个问题,它是.bmp文件的生成器,没有任何库来生成文件

程序生成一个空白图像,即使有像素数据。我试图更改字节,但没有成功

有什么想法吗?谢谢C++中的代码.< /p> 代码:

#包括
#包括
#包括
使用名称空间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;
}