小弟在用libjpeg.lib做图像压缩.但是在压缩的时候出现如下错误:
Unhandled exception in xxx.exe (NTDLL.DLL):0xC0000005:Access Violation
请问这个问题如何解决啊????知道的达人指教一下!小弟在此拜谢!!!!
压缩过程代码如下:
cinfo.err = jpeg_std_error(&jerr);//cinfo和jerr都已经定义申明过了.
jpeg_create_compress(&cinfo);
tempfile = fopen(tempname, "wb");//tempname为临时文件地址
jpeg_stdio_dest(&cinfo, tempfile);
cinfo.image_width = Width;//图像宽
cinfo.image_height = Height;//图像高
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
jpeg_add_quant_table (&cinfo,0,qtable[0],100,FALSE);
jpeg_add_quant_table (&cinfo,1,qtable[1],100,FALSE);
jpeg_start_compress(&cinfo, TRUE);
int row_stride=linesize;//每行字节数
int dof=dataoff+row_stride*(Height-1);//dataoff为图像数据偏移量
JSAMPROW row_pointer[1];//一行位图
while (cinfo.next_scanline < cinfo.image_height) 
{
row_pointer[0] = & (ihbitmap->source[dof-(cinfo.next_scanline * row_stride)]);
jpeg_write_scanlines(&cinfo, row_pointer, 1);//这里是出错的位置!!!!!!!!!!!!!!!!!
}
jpeg_finish_compress(&cinfo);
fclose(tempfile);
jpeg_destroy_compress(&cinfo);

解决方案 »

  1.   

    jpeg_write_scanlines(&cinfo, &row_pointer, 1)
      

  2.   

    很奇怪的,我用与之配套的JPEG解压缩程序读取一个jpeg文件,然后用这个函数另存为jpeg格式文件没有问题!
    但是我用一个打开bmp的函数读取bmp文件,然后把图像数据传入source,再调用这个函数另存为jpeg格式文件的时候就会出现上述错误了!!!
    真是无语了啊.....调了三四天,还是一点头绪都没有....
      

  3.   

    如何将BMP转成JPG
    http://www.lslnet.com/linux/dosc1/18/linux-188397.htm
      

  4.   

    估计读取bmp到source有不对的地方,或者你直接通过文件来转换成jpeg
      

  5.   


    我去你所说的这个网站看了看,也试着编译了一下他的代码.但是还是在相同位置提示相同的错误.看来确实是传入的rgb数据有问题了
    但是我读24位bmp图像的过程也就是直接读取24位bmp文件,然后从其第54位开始读取rgb数据的啊,并没有任何改动的,而且读取数据之后还能正常显示,还能够正常保存为bmp文件的.
    我就郁闷了,保存在source[]中的bmp数据,能用来保存为bmp文件,但就是不能用来进行jpeg压缩....救命啊!!!!!!我快疯了.....
      

  6.   


    我读取bmp文件过程如下,前提是只读取24位彩色图像:将文件直接读入内存,然后(0-53是头文件)从其54位开始读取图像数据,一直到文件结束.头文件自己来定义.
    不知道这样读取的图像数据是不是可以用来进行jpeg压缩的RGB数据.但是这些数据可以用来显示bmp图像啊.还能另存为bmp呢...无语了...
      

  7.   

    用现成的吧,GDI+,几行代码KO..    ^&^
      

  8.   

    本人也在做这方面的研究,我参考赵新国的“使用libjpeg处理图像(libjpeg的使用压缩与解压缩jpg格式)”和代码,http://hi.baidu.com/d_south/blog/item/621285d494e41c09a08bb706.html
    但是有些图像可以成功压缩,但很多图片会都出现扭曲并且彩色图变成灰度图啦,不知道是什么原因,希望有高手可以解答!
      

  9.   

    int row_stride=linesize;//每行字节数 
    有可能是字节数设得不对
      

  10.   

    row_pointer[0] = & (ihbitmap->source[dof-(cinfo.next_scanline * row_stride)]);
    是不是这句出的问题