我一直在尝试将文件数据从一个 BMP 文件复制到另一个。但是,复制的值不正确或与显示的值不一致: https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapinfoheader 和 https://learn.microsoft.com/en-us/windows/win32/api /wingdi/ns-wingdi-位图文件头
例如: 在现场:bfType = BM (0x4D42) 我的代码:bfType = 55551
bmp.h
#include <stdint.h>
typedef uint8_t BYTE;
typedef uint32_t DWORD;
typedef int32_t LONG;
typedef uint16_t WORD;
typedef struct
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
}
BITMAPFILEHEADER;
typedef struct
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
}
BITMAPINFOHEADER;
typedef struct
{
BYTE rgbtBlue;
BYTE rgbtGreen;
BYTE rgbtRed;
}
RGBTRIPLE;
main.c
// Public Libraries
#include <stdio.h>
#include <stdlib.h>
// Private Libraries
#include "bmp.h"
// Global Variables
#define ONCE 1
// Start
int main(int argc, char* argv[])
{
if (argc != 4)
{
printf("ERROR: Command Line\n");
printf("EXE -> In -> Out -> Filter\n\n");
return 1;
}
// Open Original Image
FILE* Original = fopen(argv[1], "rb");
if (Original == NULL)
{
printf("ERROR: Original Image Can't Be Found\n");
printf("Check File Name\n\n");
return 1;
}
else
{
printf("Image Found!\n\n");
}
// Original Image Data
// Read Bitmap File Header
BITMAPFILEHEADER BF;
fread(&BF, ONCE, sizeof(BITMAPFILEHEADER), Original);
printf("Bitmap File Header Read...\n\n");
// Read Bitmap Info Header
BITMAPINFOHEADER BI;
fread(&BI, ONCE, sizeof(BITMAPINFOHEADER), Original);
printf("Bitmap Info Header Read...\n\n");
}
我还硬编码了每个值以查看它们产生的结果
bf类型:55551 bfSize:1179258880 bfReserved1:17993 bfReversed2:256 bfOffBits: 1207959809
bi尺寸:18432 双宽:1477239551 双高:1598243657 双翼飞机:21072 双位计数:17999 双压缩:4541513 双尺寸图像:257 biXPelsPerMeter:1766606860 biYPelsPerMeter:268595054 biClr用过的:1852637184 biClr重要:1196585588