提取原始图像数据,但结果超出预期

时间:2018-10-12 13:34:44

标签: c++ image file fread fseek

我正在使用C ++提取原始图像数据。 1280x800 area is what I want

但是麻烦来了。 我使用fseekfread函数移动文件指针,但是两个结果都超出我的预期。 似乎指针不是我要移动的位置。 有人可以给我一个提示吗?

#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);
}

0 个答案:

没有答案