久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6701|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

JPG圖片C語言解碼顯示例子-期末傾情奉獻(xiàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-14 18:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
     企圖解碼JPG的圖片并且代碼完全由自己來寫,那是不容易的,據(jù)我所知這種代碼完全可以當(dāng)做碩士研究生的畢業(yè)論文了.
    我今天用的是Tjpg解碼庫庫函數(shù)大概1000行,顯示過程中除了需要Tjpg解碼庫提供的兩個(gè)庫函數(shù)
/* Error code */
typedef enum {
        JDR_OK = 0,        /* 0: Succeeded */
        JDR_INTR,        /* 1: Interrupted by output function */       
        JDR_INP,        /* 2: Device error or wrong termination of input stream */
        JDR_MEM1,        /* 3: Insufficient memory pool for the image */
        JDR_MEM2,        /* 4: Insufficient stream input buffer */
        JDR_PAR,        /* 5: Parameter error */
        JDR_FMT1,        /* 6: Data format error (may be damaged data) */
        JDR_FMT2,        /* 7: Right format but not supported */
        JDR_FMT3        /* 8: Not supported JPEG standard */
} JRESULT;






/* Rectangular structure */
typedef struct {
        WORD left, right, top, bottom;
} JRECT;






/* Decompressor object structure */
typedef struct JDEC JDEC;
struct JDEC {
        UINT dctr;                                /* Number of bytes available in the input buffer */
        BYTE* dptr;                                /* Current data read ptr */
        BYTE* inbuf;                        /* Bit stream input buffer */
        BYTE dmsk;                                /* Current bit in the current read byte */
        BYTE scale;                                /* Output scaling ratio */
        BYTE msx, msy;                        /* MCU size in unit of block (width, height) */
        BYTE qtid[3];                        /* Quantization table ID of each component */
        SHORT dcv[3];                        /* Previous DC element of each component */
        WORD nrst;                                /* Restart inverval */
        UINT width, height;                /* Size of the input image (pixel) */
        BYTE* huffbits[2][2];        /* Huffman bit distribution tables [id][dcac] */
        WORD* huffcode[2][2];        /* Huffman code word tables [id][dcac] */
        BYTE* huffdata[2][2];        /* Huffman decoded data tables [id][dcac] */
        LONG* qttbl[4];                        /* Dequaitizer tables [id] */
        void* workbuf;                        /* Working buffer for IDCT and RGB output */
        BYTE* mcubuf;                        /* Working buffer for the MCU */
        void* pool;                                /* Pointer to available memory pool */
        UINT sz_pool;                        /* Size of momory pool (bytes available) */
        UINT (*infunc)(JDEC*, BYTE*, UINT);/* Pointer to jpeg stream input function */
        void* device;                        /* Pointer to I/O device identifiler for the session */
};
之外,還需要自己寫兩個(gè)函數(shù).
先來看下其中一個(gè)庫函數(shù)的聲明:
JRESULT jd_prepare (
JDEC* jd,/* Blank decompressor object */
UINT (*infunc)(JDEC*, BYTE*, UINT),/* JPEG strem input function */
void* pool,/* Working buffer for the decompression session */
UINT sz_pool,/* Size of working buffer */
void* dev/* I/O device identifier for the session */
)

UINT (*infunc)(JDEC*, BYTE*, UINT),/* JPEG strem input function */這是這個(gè)庫函數(shù)的第二個(gè)參數(shù)的聲明.這是一個(gè)指向函數(shù)的指針.
為了給這個(gè)參數(shù)賦值 首先要先寫一個(gè)函數(shù) 這個(gè)函數(shù)由庫函數(shù)調(diào)用.用來從磁盤讀取圖像的數(shù)據(jù)
UINT InputData(JDEC * jdec , BYTE *buff , UINT nbyte)
{
    /* 這個(gè)函數(shù)將被
jd_prepare  調(diào)用 調(diào)用此函數(shù)后希望將得到的數(shù)據(jù) 保存在buff為首地址的內(nèi)存中 數(shù)據(jù)的長度為nbyte */
    if(buff)/* buff 如果不為NULL */
    {
        f_read(&fil , buff , nbyte ,&br);/* &fil 保存圖片數(shù)據(jù)的地址 */
        return br;
    }
    else/* 否則將移動(dòng)數(shù)據(jù) */
    {
        return (f_lseek(&fil, f_tell(dev->fp) + nbyte) == FR_OK) ? nbyte : 0;
    }
   
}


UINT OutputData(JDEC *jdec , void bitmap , JRECT *rect)
{
/* */

    LCD_Disp(rect->left,rect->top,rect->right,rect->bottom,(uint16_t*)bitmap);

    return 1;

}
  

int main(void)
{
    JDEC jdec;
    JRESULT res;
   
    uint8_t work[4096];

    /* 首先要打開文件 */
    /*......*/
    res=jd_prepare(&jdec,InputData,work,4096, ... );/* 根據(jù)我的實(shí)驗(yàn)這個(gè)函數(shù)的最后一個(gè)參數(shù)可以不用傳 但是為了能編譯通過 隨便傳一個(gè)指針就可以了 */
   
    if(res==JDR_OK)
    {
        res=jd_decomp(&jdec,OutputData,0);
        
        if(res==JDR_OK)
        {
            /* 成功 */
        }

    }
}












分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕免费在线 | 色本道 | 日韩亚洲一区二区 | 欧美成人在线免费 | 欧美激情精品久久久久久变态 | 欧美国产日韩精品 | 国产精品久久久久999 | 久久久久久久久淑女av国产精品 | 久久激情网 | 特级丰满少妇一级aaaa爱毛片 | avmans最新导航地址 | 免费h在线 | 激情a| 免费v片在线观看 | 久久国产99 | 国产精品福利视频 | 欧美性区| 国产一区二区三区免费视频 | 91精品国产综合久久久密闭 | 日韩精品免费在线观看 | 美女艹b| 日韩欧美中文字幕在线观看 | h视频免费在线观看 | 日本久草 | 黄网站在线播放 | 欧美精品一区二区免费 | 日本久久综合网 | 欧美日韩黄 | 嫩草研究影院 | 在线观看免费av网站 | 日韩免费中文字幕 | 国产精品极品美女在线观看免费 | 国产精品久久久久久久免费大片 | 免费黄色录像片 | 九九热视频这里只有精品 | 久久成人国产精品 | 国产成人99av超碰超爽 | 精品在线观看一区 | 激情一区二区三区 | 欧美一区二区三区视频 | 一区二区三区在线观看视频 |