位图文件未按正确的顺序保存在内存中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位图文件未按正确的顺序保存在内存中相关的知识,希望对你有一定的参考价值。
我有一个24 bpp,12x12像素的位图图像。当我尝试将它加载到由qazxsw poi这个页面构建的strust时,我得到2个错误:
- struct Simplified Windows BMP Bitmap File Format Specification中的文件大小大小为0时应为54,而reserved2应为54时为54。
BITMAPFILEHEADER
的bpp永远不对。 同一结构中的图像大小永远不对。 文件指针BITMAPIMAGEHEADER
跳转到一个随机位置,该位置从内存中读取垃圾而不是位图的实际数据,除非我将其移回文件头并再次手动移动14个字节。我的问题是:我该如何解决这个问题?有没有办法来解决这个问题 ?
.
fileptr
主要:
#ifndef LOADBMP
#define LOADBMP
typedef struct BITMAPFILEHEADER //total of 14 bytes
{
unsigned char bfType[2];
unsigned long bfSize;
unsigned short Reserved1;
unsigned short Reserved2;
unsigned long bOffBits;
}BITMAPFILEHEADER;
typedef struct BITMAPIMAGEHEADER
{
unsigned long bisize;
unsigned long widh;
unsigned long height;
unsigned short biplanes;
unsigned short bpp;
unsigned long compType;
unsigned long Image_Size;
unsigned long biXPelsPerMeter;
unsigned long biYPelsPerMeter;
unsigned long ClrUsed;
unsigned long Clrimp;
}BITMAPIMAGEHEADER;
#endif //LOADBMP
在Windows中你应该添加qazxsw poi并使用qazxsw poi和qazxsw poi,它们被定义为#include <string.h>
#include <stdio.h>
#include "LOADBMP.h"
#include "ERROR.h"
void main()
{
BITMAPFILEHEADER BFH;
BITMAPIMAGEHEADER BIH;
FILE *fileptr = fopen("C:\Users\mishe\Desktop\BMP.bmp", "rb");
unsigned char *image;
fread_s(&BFH, sizeof(BITMAPFILEHEADER), sizeof(BITMAPFILEHEADER), 1, fileptr);
rewind(fileptr);
fseek(fileptr, 14, SEEK_CUR);
fread_s(&BIH, sizeof(BITMAPIMAGEHEADER), sizeof(BITMAPIMAGEHEADER), 1, fileptr);
}
如果您定义自己的qazxsw poi,那么qazxsw poi运算符不能保证按预期返回14,因为结构可以填充到成员对齐。
如果您没有在Windows上编译或Windows头文件不可用,则使用编译器特定关键字来关闭结构对齐。见#include <windows.h>
或者,如下所示读取54个字节(再次,假设您不在大端机器上)
BITMAPFILEHEADER
以上是关于位图文件未按正确的顺序保存在内存中的主要内容,如果未能解决你的问题,请参考以下文章