【问题标题】:Not a JPEG file: Starts with 0x00 0x00不是 JPEG 文件:以 0x00 0x00 开头
【发布时间】:2013-11-14 03:53:53
【问题描述】:

我正在尝试使用 jpeg-6b 库以及围绕该库制作的包装器来读取工作 JPEG 文件。

当我有一个动态图像时,它可以正常工作,但是当我尝试将一个静态图像放入文件时,它不起作用并将此错误显示为 Not a JPEG file: Starts with 0x00 0x00 and early end of a file .我不确定问题出在哪里,但我认为问题在于我正在传递的图像指针。但我正在尝试读取指针值,它会打印 JPEG 文件中的正确值。

这里是代码sn-p

char *image_jpeg;
char *entries;
FILE *fd;
fd = fopen("abc.jpg", "r");
fseek(fd, 0, SEEK_END);
file_size = ftell(fd);
rewind(fd);

image_jpeg = malloc(sizeof(char) * file_size);
fread(image_jpeg, file_size, 1, fd);
printf("file_size %d",file_size);
fclose(fd);


printf("%x\n", image_jpeg[0] & 0xff);
printf("%x\n", image_jpeg[1] & 0xff);
printf("%x\n", image_jpeg[2] & 0xff);
printf("%x\n", image_jpeg[3] & 0xff);

decompress_jpeg(&image_raw, &size_raw, &width, &height, &bpp, image_jpeg, file_size,jpeg_frac);

这是解压函数的sn-p,它可以很好地处理具有相同func调用的动态图像数据。

int decompress_jpeg(char **dest, 
                int *size, 
                int *width, 
                int *height, 
                int *bpp, 
                char *src, 
                int src_size,
                int frac)
{
  FILE *in = fmemopen(src, src_size, "rb");
  JSAMPLE **buff;
  int bytespp;
  struct jpeg_decompress_struct cinfo;
  struct jpeg_error_mgr jerr;

  if (frac != 1 && frac != 2 && frac != 4) {
    frac = 1;
    // THODO warning
  }

  cinfo.err = jpeg_std_error(&jerr);
  jpeg_create_decompress(&cinfo);
  jpeg_stdio_src(&cinfo, in);
  jpeg_read_header(&cinfo, TRUE);
....
 .....
}

【问题讨论】:

    标签: c image pointers libjpeg


    【解决方案1】:

    您将一个名为“image”的变量传递给 decompress_jpeg,但您将 jpeg 文件读入了“image_jpeg”。

    【讨论】:

    • 哎呀,这是一个错字,但不是问题..错误仅与 image_jpeg 一起出现..
    • 嗯,你正在做的其他事情对我来说看起来不错。 (虽然我不知道 fmemopen 并且我可能已经为此使用了自定义源。)
    • @VincentPovirk fmemopen()。比较新的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多