Я использую C ++ для извлечения необработанных данных изображения.
Но тут возникает проблема.Я использую либо fseek
, либо fread
функции для перемещения указателя файла, но оба результата не соответствуют моим ожиданиям.Кажется, указатель - это не то место, куда я хочу переместиться.Может ли кто-нибудь дать мне подсказку?
#include <stdio.h>
#include <stdlib.h>
int IMAGE_WIDTH=1280;
int IMAGE_HEIGHT=800;
int size=1280*800*2;
int header=128;
int line_padding=0;
int main()
{
FILE* fd;
FILE* fd_bin;
char *temp = (char*)malloc(size);
char *dat = (char*)malloc(size);
if (!dat) {
perror("malloc");
return NULL;
}
fd = fopen("original.raw", "rb");
if (!fd) {
printf("File Read Fail...\n");
exit(1);
}
// fseek(fd, header, SEEK_SET);
fread(temp, 1, header, fd);
for(int k=0;k<IMAGE_HEIGHT;k++)
{
fread(dat, 1, IMAGE_WIDTH*2, fd);
//fseek(fd , line_padding*2, SEEK_CUR);
fread(temp, 1, line_padding*2, fd);
}
/////////////////////////////Save bin
fd_bin = fopen("output.raw", "wb");
if (!fd_bin) {
printf("File Open Fail...\n");
exit(1);
}
fwrite( dat, 1, IMAGE_WIDTH*IMAGE_HEIGHT*2, fd_bin);
fclose(fd_bin);
///////////////////////////////////////////
fclose(fd);
free(temp);
free(dat);
}