libjpegは
http://sourceforge.net/projects/libjpeg/files/
のjpegsr6.zipを解凍したものをMSYSでコンパイルしたものを使っています。
MSYSはgcc version3.2.3です。
画像を暗号化するソフトにlibjpegを使ってjpegを読み込む機能をつけようと思ったのですが、
jpeg_create_decompress( &cinfo );でエラーを吐きます。
コードはこれです。
#include "imageaes.h"
#define XMD_H
#include <stdio.h>
#include <stdlib.h>
#include "jpeglib.h"
/*
http://www.syuhitu.org/other/jpeg/jpeg.html
を参考に
*/
bmp_t* loadJpeg(const char* filename) {
JSAMPARRAY img;
bmp_t* resultbmp;
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE* infile;
int i;
int prevscanline;
img=(JSAMPARRAY)malloc(sizeof(JSAMPROW));
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress( &cinfo );
infile=fopen(filename,"rb");
if(infile==NULL) {
free(img);
return NULL;
}
jpeg_stdio_src(&cinfo,infile);
jpeg_read_header(&cinfo,TRUE);
jpeg_start_decompress(&cinfo);
resultbmp=bmpMake(cinfo.output_width,cinfo.output_height);
if(!resultbmp) {
jpeg_destroy_decompress(&cinfo);
fclose(infile);
free(img);
return NULL;
}
prevscanline=0;
while( cinfo.output_scanline < cinfo.output_height ) {
if(cinfo.output_scanline>=getBmpHeight(resultbmp)) {
/*エラー、行が多過ぎる*/
jpeg_destroy_decompress(&cinfo);
fclose(infile);
bmpFree(resultbmp);
free(img);
return NULL;
}
/*jpeg読み込み*/
jpeg_read_scanlines(&cinfo,img,1);
/*データ変換*/
if(cinfo.output_scanline>prevscanline) {
for(i=0;i<getBmpWidth(resultbmp);i++) {
if(cinfo.out_color_components==1) {
getBmpXY(resultbmp,i,cinfo.output_scanline-1).r=img[0][i];
getBmpXY(resultbmp,i,cinfo.output_scanline-1).g=img[0][i];
getBmpXY(resultbmp,i,cinfo.output_scanline-1).b=img[0][i];
} else {
getBmpXY(resultbmp,i,cinfo.output_scanline-1).r=img[0][i*3];
getBmpXY(resultbmp,i,cinfo.output_scanline-1).g=img[0][i*3+1];
getBmpXY(resultbmp,i,cinfo.output_scanline-1).b=img[0][i*3+2];
}
}
prevscanline=cinfo.output_scanline;
}
free(img[0]);
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(infile);
free(img);
return resultbmp;
}
JPEG Parameter struct mismatch: library thinks size is 432,
caller expects 464
です。
どうしたらjpegが読み込めるようになるのでしょうか?
教えていただければ幸いです。
よろしくお願いします。