免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9098 | 回复: 11

[C] [已解决]mingw+gcc编译jpeglib,编译和运行不出错,但是输出图像是乱码 [复制链接]

论坛徽章:
0
发表于 2012-07-24 18:33 |显示全部楼层
本帖最后由 fnems 于 2012-07-27 11:59 编辑

不知道我遇到的这个问题是不是有普遍性

环境是
Win7-Pro + intel-i3-32bit + mingw + gcc-3.4.5
编译的库是
jpeglib-6 和 jpeglib-7

配置参数很简单,就是 configure --prefix=/mingw
编译过程也没问题。

就是编译完之后用起来总是不对。
程序也不提示出错,但是无论压缩还是解压,图像都是乱码一样。
起初还以为自己的代码哪里出了毛病,后来用jpeglib自带的cjpeg和djpeg,发现也是不能正确的压缩和解压图像。

cp-jpeglib.png
这个是原始图片和自己调用libjpeg的压缩结果

cp-cjpeg.png
这个是自带的测试图像和cjpeg的压缩结果

libjpeg.zip (658.11 KB, 下载次数: 17)

论坛徽章:
0
发表于 2012-07-24 20:56 |显示全部楼层
凡事必有因,仔细找找原因吧

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
发表于 2012-07-25 13:58 |显示全部楼层
看看是几个字节每位

论坛徽章:
0
发表于 2012-07-25 16:29 |显示全部楼层
本帖最后由 fnems 于 2012-07-25 16:30 编辑

下载了libjpeg-turbo-1.2.0的源码编译,用生成的cjpeg压缩,还是有同样问题;
在别的Win7电脑上换用新版本MinGW(gcc-4.7.0)编译也是同样有问题。

按说不应该这样吧……难道libjpeg和win7冲突?

libjpeg-turbo-test.jpg
libjpeg-turbo-1.2.0 的 cjpeg压缩结果

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
发表于 2012-07-26 10:12 |显示全部楼层
Makefile里面有没有-fno-strict-aliasing参数?如果没有的话,加上试试吧。

论坛徽章:
0
发表于 2012-07-26 11:28 |显示全部楼层
本帖最后由 fnems 于 2012-07-26 11:28 编辑

回复 5# w_anthony


    首先感谢关注和建议!

现在是用的libjpeg-turbo-1.2.0的库,编译好的,for gcc的windows版本。
发布包里面cjpeg.exe没问题了,但是自己编译的程序还是输出乱码。

自己代码的编译很简单,加上禁止严格对齐的参数后是 gcc -O2 -fno-strict-aliasing -o t.exe ptrscr.c -lgdi32 -ljpeg

这样压缩的图像还是有乱码……

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
发表于 2012-07-26 11:34 |显示全部楼层
-fno-strict-aliasing不是什么“禁止严格对齐”,这个字面的解释和实际含义相去甚远。
而且是要编译库的时候加上-fno-strict-aliasing,在Makefile文件里面加,你库都已经编译好了,加上有什么意义呢?

论坛徽章:
0
发表于 2012-07-26 15:43 |显示全部楼层
回复 7# w_anthony


    好吧,现在我编译库的时候在CFLAG里面添加了-fno-strict-aliasing,编译出来的cjpeg.exe还是生成乱码。
    另外用编译好的libjpeg-turbo-1.2.0库,无论是动态库还是静态库都有乱码。

总感觉是跟Win7的兼容性有问题……

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
发表于 2012-07-26 17:23 |显示全部楼层
fnems 发表于 2012-07-26 15:43
回复 7# w_anthony


貌似我用你顶楼的cjpeg.exe把bmp转换成jpg没有出现你说的问题。
cjpeg.exe -outfile a.jpg a.bmp

论坛徽章:
0
发表于 2012-07-27 11:58 |显示全部楼层
本帖最后由 fnems 于 2012-07-27 12:00 编辑

回复 9# w_anthony


    多谢!

我知道了,之前一直用的输出重定向, cjpeg testimg.bmp>a.jpg ,没想到会在这一步出问题

自己写的程序也是输出到stdout
jpeg_stdio_dest (&cinfo, fdopen(fileno(stdout),  "wb"));
改成输出到磁盘文件就没问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP