我在C中编写了一个程序来打开位图图像并保存图像的尺寸。我在编写fread函数时遇到了一些问题。请告诉我在我编写的代码中该函数的正确格式应该是什么 代码有什么问题吗?
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
void fskip(FILE *fp, int num_bytes)
{
int i;
for (i=0; i<num_bytes; i++)
fgetc(fp);
}
typedef struct tagBITMAP /* The structure for a bitmap. */
{
int width;
int height;
//unsigned char *data;
} BITMAP;
int main()
{
int temp1=0;
BITMAP *bmp[50];
FILE *fp = fopen("splash.bmp","rb");
if (fp!=NULL && (fgetc(fp[count])=='B' && fgetc(fp[count])=='M')){
bmp[temp1] = (BITMAP *) malloc (sizeof(BITMAP));
fskip(fp,16);
fread(&bmp[temp1].width, sizeof(int), 1, fp);
fskip(fp,2);
fread(&bmp[temp1].height,sizeof(int), 1, fp);
fclose(fp);
}
else exit(0);
getch();
}
答案 0 :(得分:0)
2个问题。
if (fp!=NULL && (fgetc(fp[count])=='B' && fgetc(fp[count])=='M')){
应该是
if (fp!=NULL && (fgetc(fp)=='B' && fgetc(fp)=='M')){
你正在“跳过”错误的金额
// read 1 integer (likely size 4)
fread(&bmp[temp1].width, sizeof(int), 1, fp);
// Skip 2 bytes
fskip(fp,2);
// read another integer (likely size 4)
fread(&bmp[temp1].height,sizeof(int), 1, fp);
一种解决方案
fread(&bmp[temp1].width, sizeof(int), 1, fp);
// Don't skip - you are in the right location.
fread(&bmp[temp1].height,sizeof(int), 1, fp);
更好的解决方案
typedef struct tagBITMAP /* The structure for a bitmap. */
{
uint32_t width;
uint32_t height;
} BITMAP;
fread(&bmp[temp1].width, sizeof(bmp[temp1].width) , 1, fp);
fread(&bmp[temp1].height,sizeof(bmp[temp1].height), 1, fp);