TJpgDec—轻量级JPEG解码器

TJpgDec—轻量级JPEG解码器

本文由乌合之众lym瞎编,欢迎转载blog.cnblogs.net/oloroso
下文中解码一词皆由decompression/decompress翻译而来。

TJpgDec是一个为小型嵌入式系统高度优化的创建JPEG图像的解码模块。它工作时占用的内存非常低,以便它可以集成到微控芯片,如AVR, 8051, PIC, Z80, Cortex-M0等。

特性

  • 平台独立。使用ANSI-C编写
  • 易于使用的主操作模式
  • 完全可重入的体系结构

    Very small memory footprint:

  • 非常小的内存占用

    独立于图像尺寸的3K工作内存。
    3.5-8.5KB的文本和常数ROM.

  • 输出格式:

    缩放比例:1/1、1/2、1/4或1/8可选。
    像素格式:RGB888或RGB565预配置。

API接口

有两个函数用于分析和解码JPEG图像。

jd_prepare

jd_prepare - 准备解码JPEG图像

jd_prepare分析JPEG数据并创建一个解码对象(decompression object)用于随后的解码过程。

JRESULT jd_prepare (JDEC* jdec,            /* Pointer to blank decompression object */UINT(*infunc)(JDEC*,BYTE*,UINT), /* Pointer to input function */void* work,            /* Pointer to work area */UINT sz_work,          /* Size of the work area */void* device           /* Device identifier for the session */);

参数

  • jdec

    指定解码对象去初始化。这个解码对象是用于后续的解码操作。

  • input

    指定用户定义的数据输入函数。jd_preparejd_decomp调用这个函数来从输入流读取JPEG数据.

  • work

    指向此会话工作区域的指针。它应该与word边界对齐或者它可以导致一个异常。

  • sz_work

    指定工作区域的字节数。TJpgDec至多需要3092字节的工作区域,这依赖于JPEG图像的内置参数表。通常情况下是3092字节工作区域.

  • device

    指定用户定义的会话设备标识。它保存在解码对象的device成员中。它可以用于I/O函数去识别当前会话。当I/O device固定在project或者不需要这个功能,设置为NULL并忽略它。

返回值

  • JDR_OK

    Function succeeded and decompression object is valid.
    函数执行成功,且编码对象是有效的。

  • JDR_INP

    An error occured in input function due to hard error or wrong stream termination.
    一个错误发生在input函数,由于硬件错误或者流终止。

  • JDR_MEM1

    Insufficient work area for this JPEG image.
    工作区域不足解码这个JPEG图像。

  • JDR_MEM2

    Insufficient input buffer for this JPEG image. JD_SZBUF may be too small.
    输入缓冲器不足读取这个JPEG图像,JD_SZBUF可能过小。

  • JDR_PAR

    Parameter error. Given pointer to the work area is NULL.
    参数错误。传入的工作区指针为NULL。

  • JDR_FMT1

    Data format error. The JPEG data can be collapted.
    数据格式错误。JPEG数据损坏。

  • JDR_FMT2

    Right format but not supported. May be a grayscale image.
    格式正确,但不支持。也许是一个灰度图像。

  • JDR_FMT3

    Not supported JPEG standard. May be a progressive JPEG image.
    不支持JPEG标准,也许是一个先进的JPEG图像。

描述

jd_prepare函数是JPEG解码会话的第一阶段。它分析JPEG图像和创建解码参数表。函数成功后,会话准备好在jd_decomp函数解码JPEG图像。应用程序可以参考JPEG解码对象中存储的尺寸大小。这个信息将用于在后续的解码阶段配置输出设备(device)和参数。

jd_decomp

jd_decomp - 执行解码JPEG图像

jd_decomp函数解码JPEG图像并输出RGB数据。

JRESULT jd_decomp (JDEC* jdec,             /* Pointer to valid decompressor object */UINT(*outfunc)(JDEC*,void*,JRECT*), /* Pointer to output function */BYTE scale              /* Scaling factor */);

参数

  • jdec

    指定有效的解码对象。

  • outfunc

    指定用户定义的输出函数。jd_decomp调用这个函数去输出解码JPEG图像的RGB形式。

  • scale

    指定输出比例因子N。输出图像的缩小比例为1/2^N(N = 0 to 3)。当缩放功能禁用时(JD_USE_SCALE == 0),它必须是0.

返回值

  • JDR_OK

    Function succeeded.
    函数执行成功。

  • JDR_INTR
    The decompression process is interrupted by output function.

    解码过程在输出函数中断。

  • JDR_INP

    An error occured in input function due to hard error or wrong stream termination.
    一个错误发生在input函数,由于硬件错误或者流终止。

  • JDR_PAR

    Parameter error. Given scale factor is invalid.
    参数错误。给定的缩放值无效。

  • JDR_FMT1

    Data format error. The JPEG data can be collapted.
    数据格式错误。JPEG数据损坏。

描述

jd_decomp是JPEG解码会话的第二阶段。它解码JPEG图像并通过用户定义的输出函数输出数据,在它之后,解码对象将不在有效。

在解码时指定的比例因子,它将JPEG图像按1/2、1/4或1/8比例缩放尺寸。例如,当解码一个1024x768大小JPEG图像在1/4比例,它将输出256x192大小。相比不缩放,1/2和1/4的缩放由于求均值,解码速度略有下降。但是1/8缩放相比不缩放是2-3倍的速度输出,因为每个块IDCT和求均值可以跳过。这一特点适合创建缩略图。

I/O函数

输入JPEG数据并输出解码后像素,TJpgDec需要用户定义两个I/O函数

Input Function

Input funciotn - 从输入流读取JPEG数据

用户定义的从输入流读取数据的输入函数。

UINT in_func (JDEC* jdec,    /* Pointer to the decompression object */BYTE* buff,    /* Pointer to buffer to store the read data */UINT ndata     /* Number of bytes to read */);

参数

  • jdec

    指定解码会话的解码对象。

  • buff

    指定读缓冲器去保存读取数据。传入NULL将数据从输入流移除。

  • ndata

    指定从输入流读取或移除的字节数。

返回值

返回读取或移除的字节数。若返回0,jd_preparejd_decomp函数将终止并返回JDR_INP

描述

这个函数是TJpgDec模块的数据输入接口。可以通过指向设备标识符的指针来标识相应的解码会话。

Output Function

Output function - 写像素数据到输出设备

用户定义的输出函数,写解码像素到输出设备。

UINT out_func (JDEC* jdec,    /* Pointer to the decompression object */void* bitmap,  /* RGB bitmap to be output */JRECT* rect    /* Rectangular region to output */);

参数

  • jdec

    指定会话的解码对象。

  • bitmap

    指定RGB位图(bitmap)用于输出。

  • rect

    指定在图像中的矩形区域去输出RGB位图。

返回值

通常返回1,以便TJpgDec继续解码过程。当它返回0,jd_decomp函数终止并返回JDR_INTR,这在中断减压过程中有用。

描述

这个函数是TJpgDec模块的数据输出函数。可以通过指向设备标识符的指针来标识相应的解码会话,jdec->device通过jd_prepare函数第五个参数确定。

在这个函数中,位图发送到帧缓冲或显示设备。第一个像素是位图矩形的左上角位置,最后一个像素是右下角位置。矩形的大小从1x116x16取决于图像的裁剪、缩放和采样因子。如果矩形是帧缓冲区,它将在函数中倍裁剪。
像素格式取决于JD_FORMAT参数的配置选项。当它配置为RGB888,位图是一个字节数组,每3个字节保存一个RGB像素:RRRRRRRR, GGGGGGGG, BBBBBBBB, RRRRRRRR, GGGGGGGG, BBBBBBBB, ...;配置为RGB565时,位图是一个WORD数组,RGB数据1word每像素:RRRRRGGGGGGBBBBB, RRRRRGGGGGGBBBBB, RRRRRGGGGGGBBBBB, ...

资源

TJpgDec是一个免费软件,对教育、研究和开发开发。你可以使用、修改和重新分发它,对个人项目或商业产品没有任何限制和责任。

  • 先读: TJpgDec 应用笔记2012年8月13日
  • 下载: TJpgDec R0.01b 2012年9月3日
  • 下载: TJpgDec 示例项目 (AVR, PIC24, LPC1114 and Win32)2012年2月19日
  • 演示短片(MP4/3MB)

转载于:https://www.cnblogs.com/oloroso/p/5851505.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395146.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帮助中心 开源_对开源的贡献帮助我获得了Microsoft的实习机会。 这就是它可以为您提供帮助的方式。

帮助中心 开源“Accomplished X by implementing Y which led to Z.” “通过实现导致Z的Y来完成X。” When I interviewed for software engineering internships this past fall, my open source contributions helped me stand out from the crowd.去年秋天,当我…

java 操作窗口_java selenium (十二) 操作弹出窗口

public static void testMultipleWindowsTitle(WebDriver driver) throws Exception{String url"E:\\StashFolder\\huoli_28hotmail.com\\Stash\\Tank-MoneyProject\\Selenium Webdriver\\AllUIElement.html";driver.get(url);// 获取当前窗口的句柄String parentWin…

1970“变种”bug连WiFi热点iOS设备会变砖?

据悉,该漏洞和此前“1970”的bug有关系,但不完全一样。 威锋网讯,你还记得将 iOS 设备系统时间调至 1970.1.1 会让设备变砖的 bug 么?尽管苹果在 iOS 9.3 中已经将这个 bug 修复,但据安全研究员指出,他们发…

Centos7 安装python3.7.2

下载python3.7.2源码 wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz 下载完后对压缩包解压缩 tar -xf Python-3.6.3.tgz 进入解压缩完后的文件夹: cd Python-3.7.2 配置(需要加上--with-ssl,不然pip不能安装相关函数库,pyt…

华为 9

package NiukeBrush; import java.util.Iterator; //排序与查重 import java.util.LinkedHashSet; import java.util.Scanner; import java.util.Set;//改进做法 public class Huawei9next {public static void main(String[] args) {// TODO Auto-generated method stub//键盘…

印刷点阵字体_印刷术如何确定可读性:衬线与无衬线,以及如何组合字体。

印刷点阵字体by Harshita Arora通过Harshita Arora For digital design, it’s important to know and understand how to use and how to combine different fonts. There’s a font for every mood!对于数字设计,重要的是了解和理解如何使用以及如何组合不同的字…

java中setattribute_浅谈Java web 中request的setAttribute()用法

在两个JSP代码片中有这样两端程序:JSP1代码String [] testnew String[2];test[0]"1";test[1]"2";request.setAttribute("test",test) ;response.sendRedirect("jsp2.jsp");JSP2代码String test[](String[])request.getAttr…

基础拾遗------webservice详解

基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗------接口详解 基础拾遗------泛型详解 基础拾遗-----依赖注入 基础拾遗-----数据注解与验证 基础拾遗-----mongoDB操作 基础…

南京打造大数据创新孵化平台

9月9日上午,南京微软云暨移动应用孵化平台在南京开发区新港高新园揭牌运营,项目创业大赛同步启动。 据悉,南京微软云暨移动应用孵化平台将打造以“云物大智”产业为核心的创新创业孵化平台。平台代理总经理童雪松介绍,平台汇集了强…

react控制组件中元素_React Interview问题:浏览器,组件或元素中呈现了什么?

react控制组件中元素by Samer Buna通过Samer Buna React Interview问题:浏览器,组件或元素中呈现了什么? (React Interview Question: What gets rendered in the browser, a component or an element?) **技巧问题** (** Trick Question *…

java gc时自动收dump_Full GC分析:设置Java VM参数实现在Full GC前后自动生成Dump

本文讲解了如何设置JavaVM参数实现在FullGC前后自动生成Dump。共有三个VM参数需要设置:HeapDumpBeforeFullGC 实现在Full GC前dump。HeapDumpBeforeFullGC 实现在Full GC后dump。HeapDumpPath 设置Dump保存的路径设置这些参数的方法,这里总结了四种&…

jquery插件dataTables自增序号。

dataTables官网提供了一种方式,使用后没有达到预期效果(js报错),没有深究原因。如果需要,可以按照下面的方式来。 1 $(#dataList).dataTable({2 "language": {3 "sProcessing&…

Maven使用详解

1、maven介绍&#xff1a; 2、pom.xml文件理解&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schema…

诺基亚报告称:到2020年北美电子邮件流量占比将跌至7%

日前&#xff0c;诺基亚贝尔实验室下属贝尔实验室咨询部门&#xff08;Bell Labs Consulting&#xff09;发布研究报告称&#xff0c;在北美&#xff0c;千禧一代青少年和青壮年消费群体正逐渐壮大&#xff0c;受其驱动的视频通信流量占比将由47%增至86%。随着视频通话和视频会…

开源贡献 计算_我的第一个Hacktoberfest-第一次为开源做贡献的经验

开源贡献 计算by Sibylle Sehl通过Sibylle Sehl 我的第一个Hacktoberfest-第一次为开源做贡献的经验 (My First Hacktoberfest — Experiences of Contributing to Open Source as a First Timer) Contributing to Open Source and projects can seem like a daunting process…

java web junit_如何使用junit测试javaweb工程

一:创建一个测试类,建议将测试类单独放在一个包中(在 maven 项目里有测试类专门的存放位置),新建一个Junit Test Case类,下一步 测试类的命名建议是你将要测试的类名Test,然后点 Browse, 你可以选择要进行测试的类(一般选择 Service, 因为 Service 关心的是业务需求),用这种方式…

文件系统及程序的限制关系: ulimit

想像一个状况&#xff1a;我的 Linux 主机里面同时登陆了十个人&#xff0c;这十个人不知怎么搞的&#xff0c; 同时打开了 100 个文件&#xff0c;每个文件的大小约 10MBytes &#xff0c;请问一下&#xff0c; 我的 Linux 主机的内存要有多大才够&#xff1f; 1010010 10000…

java代码_Java 代码实现排序算法

阅读本文约需要8分钟 大家好&#xff0c;我是你们的导师&#xff0c;我每天都会在这里给大家分享一些干货内容(当然了&#xff0c;周末也要允许老师休息一下哈)。上次老师跟大家分享了下SpringBootGradle MyBatisPlus3.x搭建企业级的后台分离框架的相关知识&#xff0c;今天跟大…

移动游戏市场Testin云测占有率超过90%

《王者荣耀》、全民K歌、美团大众、共享单车……越来越多的爆款应用占据着我们的手机桌面&#xff0c;也驱动着创业者不断发掘新的移动应用和商业模式&#xff0c;却鲜有人留意到&#xff0c;由移动应用催生出来的APP测试市场。 “现在用户获取成本是几年前的几十倍&#xff0c…

java 拆箱_Java自动装箱拆箱

一、装箱、拆箱定义如果一个int型量被传递到需要一个Integer对象的地方&#xff0c;那么&#xff0c;编译器将在幕后插入一个对Integer构造方法的调用&#xff0c;这就叫做自动装箱。而如果一个Integer对象被放到需要int型量的地方&#xff0c;则编译器将幕后插入一个队intValu…