📄 pbmpdec.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 + -