小弟在用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);
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);
但是我用一个打开bmp的函数读取bmp文件,然后把图像数据传入source,再调用这个函数另存为jpeg格式文件的时候就会出现上述错误了!!!
真是无语了啊.....调了三四天,还是一点头绪都没有....
http://www.lslnet.com/linux/dosc1/18/linux-188397.htm
我去你所说的这个网站看了看,也试着编译了一下他的代码.但是还是在相同位置提示相同的错误.看来确实是传入的rgb数据有问题了
但是我读24位bmp图像的过程也就是直接读取24位bmp文件,然后从其第54位开始读取rgb数据的啊,并没有任何改动的,而且读取数据之后还能正常显示,还能够正常保存为bmp文件的.
我就郁闷了,保存在source[]中的bmp数据,能用来保存为bmp文件,但就是不能用来进行jpeg压缩....救命啊!!!!!!我快疯了.....
我读取bmp文件过程如下,前提是只读取24位彩色图像:将文件直接读入内存,然后(0-53是头文件)从其54位开始读取图像数据,一直到文件结束.头文件自己来定义.
不知道这样读取的图像数据是不是可以用来进行jpeg压缩的RGB数据.但是这些数据可以用来显示bmp图像啊.还能另存为bmp呢...无语了...
但是有些图像可以成功压缩,但很多图片会都出现扭曲并且彩色图变成灰度图啦,不知道是什么原因,希望有高手可以解答!
有可能是字节数设得不对
是不是这句出的问题