我試圖讀取BMP圖像(灰階)用C,值保存到一個數組,該數組轉換成字符串與用逗號分隔的值。段錯誤中的fread()
我的程序的Windows 7 64位下運行良好,但我不得不遷移到Windows XP 32位,因爲圖書館的兼容性問題。
我有1,750張圖片需要閱讀,我想將它們全部存儲在一個字符串中。
當我啓動我的程序它去罰款,直至509個圖像,然後我得到所致的fread段錯誤()。這裏是我的代碼:
int i=0,j,k,num,len,length,l;
unsigned char *Buffer;
FILE *fp;
char *string,*finalstring;
char *query;
char tmp2[5],tmp[3];
query = (char *)malloc(sizeof(char)*200000000);
string = (char *)malloc(sizeof(char)*101376);
Buffer = (unsigned char *)malloc(sizeof(unsigned char)*26368);
BITMAPFILEHEADER bMapFileHeader;
BITMAPINFOHEADER bMapInfoHeader;
length = 0;
for (k =1;k<1751;k++)
{
strcpy(link,"imagepath");
//here just indexing the images from 0000 to 1750
sprintf(tmp2,"%.4d",k);
strcat(link,tmp2);
strcat(link,".bmp");
fp = fopen(link, "rb");
num = fread(&bMapFileHeader,sizeof(BITMAPFILEHEADER),1,fp);
num = fread(&bMapInfoHeader,sizeof(BITMAPINFOHEADER),1,fp);
//seek beginning of data in bitmap
fseek(fp,54,SEEK_SET);
//read in bitmap file to data
fread(Buffer,26368,1,fp);
l=0;
for(i=1024;i<26368;i++)
{
itoa(Buffer[i],tmp,10);
len = strlen(tmp);
memcpy(string+l,tmp,len);
memcpy(string+l+len,",",1);
l = l+len+1;
}
memcpy(query,"",1);
memcpy(string,"",1);
printf("%i\n",k);
}
感謝
非常感謝你,它實際上解決我的問題,我不知道那件事與運行出的文件句柄,我認爲FP會我每次在打開image.adding FCLOSE(FP)時間進行初始化k循環的結尾解決了我的問題:) – Mehdi 2011-03-24 14:00:09