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.pswp.cn/news/395146.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395146.shtml
英文地址,請注明出處:http://en.pswp.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…