⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 Ȧ-

📁 基于Luminary的JPEG图片浏览器
💻
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**------File Info-----------------------------------------------------------------------------------------
** File name:               jpeg extern.c
** Latest modified Date:    2008-07-19
** Latest Version:          1.0
** Descriptions:            JPEG图片解码包,附加的外部函数
**
**--------------------------------------------------------------------------------------------------------
** Created by:              张展威
** Created date:            2008-07-19
** Version:                 1.0
** Descriptions:            
**
**--------------------------------------------------------------------------------------------------------
** Modified by:             
** Modified date:           
** Version:                 
** Descriptions:            
**
*********************************************************************************************************/
#include "..\HeadFile\dataType.h"//定义常用数据类型及函数返回值
#include "..\IDM\formike240x320x16_ili9320.h"//液晶显示屏驱动
#include "jpeg.h"


#ifndef __USE_IDM
boolean GbUseIDM = false;
#else
boolean GbUseIDM = true;
#endif


static INT8U GucFileReadBuf[256];                                     /* n Byte 文件数据缓存          */
static INT8U  *__GpucInBuf;                                           /* 缓用于存基址指针pucInBuf     */
static INT32U GulJpgFileStart;                                        /* 标记有效缓存数据的起始偏移量 */
static INT32U GulJpgFileEnd;                                          /* 标记有效缓存数据的终止偏移量 */
static BOOLEAN GbJpgFileEOF;                                          /* 标记文件是否读结束           */
volatile INT8U GucJpgReadPrev;                                        /* 标记上次读文件时的字节内容   */


INT8U jpgFileReadByte(INT32U ulOffset);
void  jpgReadInit(INT8U *pucInBuf);
void  displayRGB( RECTANGLE *psZoon, INT16U *puiOutBuf, INT32U ulCounter);



/*********************************************************************************************************
** 函数名称: jpgFileReadByte()
** 功能描述: 从jpg文件指定偏移量处读取1Byte数据
**
** 输   入: INT32U ulOffset:文件偏移量(Bytes)
**    
** 输   出: 无
**
** 返    回: 对应文件偏移量(Bytes)的一字节文件内容,溢出文件大小则返回 0
**         
** 全局变量: static INT8U  *__GpucInBuf      :缓用于存基址指针pucInBuf
**           static INT32U GulJpgFileStart   :标记有效缓存数据的起始偏移量
**           static INT32U GulJpgFileEnd     :标记有效缓存数据的终止偏移量
**           static BOOLEAN GbJpgFileEOF     :标记文件是否读结束
**           volatile INT8U GucJpgReadPrev   :标记上次读文件时的字节内容
**           static INT8U GucFileReadBuf[128]:n Bytes 文件数据缓存
**           
** 调用模块: 无
**
** 作    者: 张展威
** 日    期: 2008-07-25
*********************************************************************************************************/
INT8U jpgFileReadByte(INT32U ulOffset)
{
    INT8U *pucOutBuf;
    INT8U *pucFp;
    INT8U ucDataTmp,ucReturn;
    INT16U i=0,j;
    
    pucOutBuf = (INT8U *)&GucFileReadBuf[0];    
    if ((ulOffset >= GulJpgFileStart) && (ulOffset < GulJpgFileEnd)) {
        ucReturn = GucFileReadBuf[ulOffset - GulJpgFileStart];          /* 读取缓存中的数据             */
    } else {
        if ((ulOffset >= GulJpgFileEnd) && (GbJpgFileEOF == true)) {
            ucReturn = 0;
        } else {            
            j = sizeof(GucFileReadBuf);
            pucFp = __GpucInBuf + ulOffset;
            for (i = 0; i < j; i++) {                                   /* 读取一个数据块,块大小由缓   */
                                                                        /* 存决定                       */
                ucDataTmp    = *pucFp++;                                /* 读取一字节数据               */
                *pucOutBuf++ = ucDataTmp;
                if ((GucJpgReadPrev == 0xFF) && (ucDataTmp == 0xD9)) {
                  if (i == 0) {
                    if (*(pucFp-2) == 0xFF) {//重要:确保上一字节就是 0xFF
                      GbJpgFileEOF = true;
                      i++;
                      break;
                    }
                  } else {
                    GbJpgFileEOF = true;
                    i++;
                    break;
                  }
                }
                GucJpgReadPrev = ucDataTmp;
            }
            GulJpgFileStart = ulOffset;
            GulJpgFileEnd = GulJpgFileStart + i;
            ucReturn = GucFileReadBuf[0];            
        }        
    }
    return ucReturn;                                             /* 返回实际读取到的数据         */
}



/*********************************************************************************************************
** 函数名称: jpgReadInit()
** 功能描述: 初始化jpg格式图片数据读(input string)环境
**
** 输 入:   INT8U *pucInBuf:存放图片的基址
**    
** 输 出:   无
**         
** 全局变量: static INT8U  *__GpucInBuf      :缓用于存基址指针pucInBuf
**           static INT32U GulJpgFileStart   :标记有效缓存数据的起始偏移量
**           static INT32U GulJpgFileEnd     :标记有效缓存数据的终止偏移量
**           static BOOLEAN GbJpgFileEOF     :标记文件是否读结束
**           volatile INT8U GucJpgReadPrev   :标记上次读文件时的字节内容
**           
** 调用模块: 无
**
** 作    者: 张展威
** 日    期: 2008-07-25
*********************************************************************************************************/
void jpgReadInit(INT8U *pucInBuf)
{
    GucJpgReadPrev    = 0;    
    GulJpgFileStart   = 0;
    GulJpgFileEnd     = 0;
    GbJpgFileEOF      = false;
    __GpucInBuf       = pucInBuf;
}


/*********************************************************************************************************
** 函数名称: displayRGB()
** 功能描述: RGB格式图片显示
**
** 输 入:   RECTANGLE * psZoon:指向表示绘图区域大小及起始绘图点的结构变量
**           INT16U * puiOutBuf:指向RGB颜色数据
**           INT32U ulCounter  :需要绘图的像素数
**    
** 输 出:   无
**         
** 全局变量: 无
**           
** 调用模块: Formike240x320x16_ILI9320PictureFill((tRectangle *)psZoon, (INT16U *)puiOutBuf, ulCounter);
**           用颜色数据填充矩形区域,进行图像重构
**
** 作    者: 张展威
** 日    期: 2008-07-25
*********************************************************************************************************/
void displayRGB( RECTANGLE *psZoon, INT16U *puiOutBuf, INT32U ulCounter)
{
    Formike240x320x16_ILI9320PictureFill((tRectangle *)psZoon, (INT16U *)puiOutBuf, ulCounter);
}

/*********************************************************************************************************
** End of File
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -