打印

一个700行代码完成的Jpeg图片解压源码

[复制链接]
8508|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liandao|  楼主 | 2008-1-24 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                  一个700行代码完成的Jpeg图片解压源码
--------------------------------
jpeg2code.exe    把当前目录的print.jpg打印到print.txt
jpeg2code.cpp    jpeg2code.exe的源代码
Jpeg_decode.c    在ARM9裸机平台上测试过的Jpeg解压代码
DECODE.C         Jpeg_decode.c代码的原型,可用TC编译,并在真实DOS下执行
DECODE.EXE       DOS下可执行,看效果,XP 的CMD窗口就不要执行了,本来就不是真实的DOS环境。
print.jpg        测试的图片
print.txt        图片的内容
--------------------------------
    1.JPEG解压的代码不是我写的,因此不要问问关于解压原理什么的。
    2.最初在网络上找到的是DECODE.C这份源代码。我的贡献仅仅在于把这份DOS下的代码移植到ARM的平台上,只要更改是数据宽度定义的问题。见jpeg_decode.C中的#define _INT_   short
    PC上 short / int是32bit宽度的
    而ARM上short是16bit int是32bit的
    3.原有代码编写质量确实不敢说是好的,但厉害的是短短700行的代码就能完成Jpeg解压,比我见过很多别的Jpeg解压代码要简单的多很多,这点我佩服,而且我们这些搞应用的,这个能直接拿来应用,
这是不错。
    4.我的ARM平台是ARM9 我是把该函数用的WINCE的Eboot中做**显示用的。实际测试过的。编译用的是WINCE 的Platform Builder,你们应该可以很简单移植到ADS下编译的。

Jpeg_decode.c 两个调用的函数
extern void LCD_DrawPixel(INT16U x0, INT16U y0, INT8U Pixel_Lbyte, INT8U Pixel_Hbyte);
LCD上显示一个点的函数,这个需要外部来提供,而且LCD的初始化必须完成后才能使用。
extern void EdbgOutputDebugString(const unsigned char *sz, ...);
Debug输出,没什么用,你可以关闭。

对外函数接口
void JpegFileDecode(void)

想换个图片?
用jpeg2code.exe把print.jpg转换诚print.txt,然后提到Jpeg_decode.c中的内容吧。

如果想XP下编译DECODE.C 找DosBox模拟真实的DOS环境,找TC在上面编译吧。
                        
liandao
Email:lycld@163.com
2008/01/24
现在路径:
https://bbs.21ic.com/upfiles/img/20081/2008124134239130.rar
相关链接:https://bbs.21ic.com/upfiles/img/20081/2008124134239130.rar

相关帖子

沙发
hebeijiang| | 2008-1-24 14:27 | 只看该作者

谢谢!留给记号,到时移到我的系统里。

使用特权

评论回复
板凳
onemillion| | 2008-1-24 14:48 | 只看该作者

有用的东西,有时间测试一下

使用特权

评论回复
地板
古道热肠| | 2008-1-24 17:20 | 只看该作者

好,感谢楼主

使用特权

评论回复
5
gyt| | 2008-1-25 13:22 | 只看该作者

谢谢发表

使用特权

评论回复
6
农民讲习所| | 2008-1-25 13:40 | 只看该作者

改天测试测试

使用特权

评论回复
7
sz_kd| | 2008-1-25 14:16 | 只看该作者

做个记号

使用特权

评论回复
8
liandao|  楼主 | 2008-1-25 22:42 | 只看该作者

测试

1。测试前,最好能先确认LCD显示函数是正确的,然后测试,如果有问题,请对比DECODE.C和Jpeg_decode.c,我确实没有刚改代码内容,仅仅修改了一些数据宽度的部分。
2。如果有问题,欢迎Email探讨。

使用特权

评论回复
9
huntington| | 2008-1-26 09:08 | 只看该作者

收藏

使用特权

评论回复
10
wangkj| | 2009-11-5 14:08 | 只看该作者
链接错误,谁收藏过,再贴一遍。

使用特权

评论回复
11
wangkj| | 2009-11-5 14:15 | 只看该作者
竟然有人用跟51差不多的单片机实现了,找不到详细的介绍。

针对目前对全彩led显示屏图像数据的处理需依赖计算机的情况,提出利用atmega128单片机实现jpeg图像解码的方法,并利用此方法实现了通过 gprs网络对全彩led显示屏图像数据的远程传输。针对atmega128的资源和性能特点,对jpeg解码进行了可行性分析。重点论述huffman 解码、idct解码和图像缩放的优化算法在atmega128单片机上的实现。由于图像的处理在单片机上实现,降低了产品的成本,具有较强地生产实用性。

使用特权

评论回复
12
zq1987731| | 2009-11-5 21:35 | 只看该作者
谢谢LZ!记号

使用特权

评论回复
13
ejack| | 2009-11-6 07:44 | 只看该作者
同求

使用特权

评论回复
14
ecomputer| | 2009-11-6 12:50 | 只看该作者
顶,有时间再来看

使用特权

评论回复
15
lhj200304| | 2009-11-6 14:45 | 只看该作者
下不了啊。再传一下吧

使用特权

评论回复
16
大道至简| | 2009-11-6 16:10 | 只看该作者
代码短小不见的好,好阅读的code才是真的好

使用特权

评论回复
17
wangkj| | 2009-11-6 18:52 | 只看该作者
你那是对pc说的。对单片机而言,很多应用必须效率高,代码小

使用特权

评论回复
18
xiaorui011| | 2009-11-25 10:50 | 只看该作者
怎么下载不了啊

使用特权

评论回复
19
luowei2651| | 2009-11-25 17:10 | 只看该作者
留标记先

使用特权

评论回复
20
Mindor| | 2010-5-27 20:36 | 只看该作者
最近玩JPEG解码,显示到TFT LCD上。
给出的JPEG图片是24位的RGB888,但是LCD只能支持16位的RGB565.
我用网上的代码,是直接去R的高5位,G的高6位,B的高5位,但是转换后显示到TFT LCD上发现有明显的波纹,看不清图像,但是整体体现出来的颜色还是对的。
请问LZ有比较好的方法,让失真度小一点的吗?
谢谢。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

45

帖子

0

粉丝