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

📄 pbmpdec.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************
Copyright(C)2007,Rockchip Co., Ltd. All Rights Reserved.
File:  bmpdecode.c
Desc:  BMP图像解码
Note:
Author:  Eddie CF
$Log:
Revision  1.2 2007/01/09 Eddie CF

******************************************************/

//*********************includes*****************************************************
#if ((defined(BOARD)) || defined(ROCK_FS))
#ifndef BMP_DEC
#define BMP_DEC
#include "pBMPDEC.h"


/*************************************************************************
GLOBAL VARIABLES
**************************************************************************/
BMP_CALLBACKS_DECODE BMP_callbacks_decode;
BMP bmp;
/******************************************************
Name: BMPFILE_Read
Desc: 读文件,从nHandle读入size*cnt个字节的数据,存到pBuff指向的地址
Param:pBuff:存储读入数据的Buffer的指针 size:一次读入的字节数 cnt:读n次 nHandle:文件句柄
Return:读入的字节数
Global:无
Note:
Author:Eddie CF
Log:
******************************************************/
int BMPFILE_Read(void * pBuff,  int size, int cnt, void *nHandle)
{
    return (unsigned int)(FSFileRead(pBuff, size*cnt, nHandle));
}

/******************************************************
Name: BMP_Seek
Desc: 读文件,从nHandle读入size*cnt个字节的数据,存到pBuff指向的地址
Param: iHandle:文件句柄 iOffset:文件偏移量 iOrigin:从哪里开始seek
Return: 正常返回0,有错误返回-1
Global:无
Note:
Author:Eddie CF
Log:
******************************************************/
int BMP_Seek(void* iHandle, long iOffset, int iOrigin)
{
    int iTC_Ret;

    iTC_Ret = FSFileSeek(iHandle, iOffset, iOrigin);

    return iTC_Ret;
}

/******************************************************
Name: BMPFunction
Desc: 将输入图像文件,解码并重新编码成LCD指定的格式,输出到ImageBufAddr为首地址的Buffer中
Param: 无
Return: 解文件头成功返回TRUE,解头失败则返回FALSE
Global:
Note:
Author: Eddie CF
Log:
******************************************************/
unsigned long BMPFunction(unsigned long ulSubFn, unsigned long ulParam1,
                          unsigned long ulParam2, unsigned long ulParam3,
                          unsigned long ulParam4)
{

    switch (ulSubFn)
    {
        case IMAGE_CODEC_DECODE:
            {
                int ScreenWidth = ulParam1;
                int ScreenHigh = ulParam2;
                BMPOUTFACTOR BmpOutFactor;
                BmpOutFactor.BmpFile = pImageFile;
                BmpOutFactor.ImageBufAddr = ImageBufAddr;
                BmpOutFactor.ImageHInBuf = &g_bufferheight;
                BmpOutFactor.ImageWInBuf = &g_bufferwidth;
                if (ulParam3 == ThumbNailDisplay)
                {
                    if (BMP_ThumbNail_Decode(BMP_callbacks_decode, &BmpOutFactor, &bmp, ScreenWidth, ScreenHigh))
                        return TRUE;
                    else
                        return FALSE;
                }
                else
                {
                    if (BMP_Decode(BMP_callbacks_decode, &BmpOutFactor, &bmp, ScreenWidth, ScreenHigh))
                        return TRUE;
                    else
                        return FALSE;
                }
            }
        case IMAGE_CODEC_OPEN_DEC:
            {
                BMP_callbacks_decode.read_func = (unsigned int (*)(void *, unsigned int, unsigned int,  void *))BMPFILE_Read;
                BMP_callbacks_decode.seek_func = (unsigned int (*)(void *, long , int))BMP_Seek;
                BMP_callbacks_decode.write_func = BMP_CustomOutput_32BitRGB888;

                if (BMP_InitHead(BMP_callbacks_decode, pImageFile, &bmp))
                    return TRUE;
                else
                    return FALSE;
            }
        case IMAGE_CODEC_ZOOM:
            {
                rgbrotatescale original;
                tRGBPicRotateZoomInOut RGBRotSca_gFactor;
                tRGBPicRotateZoomInOut* factor = (tRGBPicRotateZoomInOut*)ulParam1;
                unsigned char* buf = (unsigned char*)ulParam2;
                original.width = g_bufferwidth;
                original.height = g_bufferheight;
                original.size = ((original.width * sizeof(targbmodel) + 3) & ~3) * original.height;
                original.data = (unsigned char*)ImageBufAddr;

                //初始化相关控制参数
                RGBRotSca_gFactor = RGBRotScaInitial(&original, factor);

                //根据初始化的控制参数,做旋转缩放操作
                if (!(RGBRotScaTransform(&original, &RGBRotSca_gFactor, buf, LCD_W, LCD_H)))
                    return FALSE;
                else
                    return TRUE;
            }
        default:
            return FALSE;
    }
}
#endif
#endif

⌨️ 快捷键说明

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