📄 tft_imgcontrol.c
字号:
#include "TFT_ImgControl.h"
#include "BitMap.h"
#include "JPEG.h"
// 用户解码函数声明
static int TFT_CheckIfBitMap(void *SrcImage);
static int TFT_DepressBitMap(STR_IMAGE *DestImage, void *SrcBitMap);
static int TFT_CheckIfJPEG(void *SrcImage);
static int TFT_DepressJPEG(STR_IMAGE *DestImage, void *SrcJPEG);
// 解码函数列表, 如需增加对图像文件的支持, 只需在这里注册文件类型判断和文件解码函数
static STR_DEPRESS_FUNC_LIST DepressFuncList[] = {
{TFT_CheckIfBitMap, TFT_DepressBitMap},
{TFT_CheckIfJPEG, TFT_DepressJPEG},
};
//=============================================================
//语法格式: int TFT_DepressImage(STR_IMAGE *DestImage, void *SrcImage)
//实现功能: 解压图像
//参数: DestImage - 解压之后的位图
// SrcJPEG - 原始图像文件
//返回值: 1: 解压成功; 0: 解压失败
//=============================================================
int TFT_DepressImage(STR_IMAGE *DestImage, void *SrcImage)
{
int i = sizeof(DepressFuncList) / sizeof(STR_DEPRESS_FUNC_LIST);
while(i--)
{
if(DepressFuncList[i].CheckImageType(SrcImage))
return (DepressFuncList[i].DepressImage(DestImage, SrcImage));
}
return 0;
}
//=============================================================
//语法格式: void TFT_ScaleLine(int width1, int width2, COLOR srcLine[], COLOR destLine[], int Reverse)
//实现功能: 缩放行
//参数: width1 - 行原始宽度
// width2 - 缩放后的宽度
// srcLine - 原始行图像保存位置
// destLine- 缩放后行图像保存位置
// Reverse - 是否水平翻转
//返回值: 无
//=============================================================
void TFT_ScaleLine(int width1, int width2, COLOR srcLine[], COLOR destLine[], int Reverse)
{
int RowDest;
int RowSrc = 0;
int RowCount = 0;
int RowStart, RowEnd, RowStep;
if(Reverse)
{
RowStart = width2 - 1;
RowEnd = -1;
RowStep = -1;
}
else
{
RowStart = 0;
RowEnd = width2;
RowStep = 1;
}
for(RowDest = RowStart; RowDest != RowEnd; RowDest += RowStep)
{
destLine[RowDest] = srcLine[RowSrc];
RowCount += width1;
while(RowCount >= width2)
{
RowCount -= width2;
RowSrc++;
}
}
}
//=============================================================
//语法格式: void TFT_ScaleImage(int width1, int height1, int width2, int height2, COLOR srcImage[], COLOR destImage[], int HorRvs, int VerRvs)
//实现功能: 缩放图像
//参数: width1, height1 - 图像原始尺寸
// width2, height2 - 缩放后的尺寸
// srcImage - 原始图像保存位置
// destImage - 缩放后图像保存位置
// HorRvs - 是否进行水平翻转
// VerRvs - 是否进行垂直翻转
//返回值: 无
//=============================================================
void TFT_ScaleImage(int width1, int height1, int width2, int height2, COLOR srcImage[], COLOR destImage[], int HorRvs, int VerRvs)
{
int LineDest , LineSrc = 0;
int LineCount = 0;
int LineStart, LineEnd, LineStep;
if(VerRvs)
{
LineStart = height2 - 1;
LineEnd = -1;
LineStep = -1;
}
else
{
LineStart = 0;
LineEnd = height2;
LineStep = 1;
}
for(LineDest = LineStart; LineDest != LineEnd; LineDest += LineStep)
{
TFT_ScaleLine(width1, width2, &srcImage[LineSrc * width1], &destImage[LineDest * width2], HorRvs);
LineCount += height1;
while(LineCount >= height2)
{
LineCount -= height2;
LineSrc++;
}
}
}
//=============================================================
//语法格式: int TFT_CheckIfBitMap(void *SrcImage)
//实现功能: 判断是否是BMP文件
//参数: SrcImage - 文件首地址
//返回值: 1: 是; 0: 否
//=============================================================
static int TFT_CheckIfBitMap(void *SrcImage)
{
char *pBuf = SrcImage;
if((pBuf[0] == 'B') && (pBuf[1] == 'M'))
return 1;
return 0;
}
//=============================================================
//语法格式: int TFT_DepressBitMap(STR_IMAGE *DestImage, void *SrcBitMap)
//实现功能: 解压位图
//参数: DestImage - 解压之后的位图
// SrcBitMap - BMP位图文件
//返回值: 1: 解压成功; 0: 解压失败
//=============================================================
static int TFT_DepressBitMap(STR_IMAGE *DestImage, void *SrcBitMap)
{
BITMAP_FILE bmp;
int i;
COLOR *pBuf = (COLOR *)DestImage->ImageBuf;
if(BMP_OpenFile(&bmp, SrcBitMap) != 0)
return 0;
DestImage->Width = BMP_GetWidth(&bmp);
DestImage->Height = BMP_GetHeight(&bmp);
for(i = 0; i < DestImage->Height; i++)
{
if(BMP_GetLineColor(&bmp, i, pBuf) == 0)
return 0;
pBuf += DestImage->Width;
}
return 1;
}
//=============================================================
//语法格式: int TFT_CheckIfJPEG(void *SrcImage)
//实现功能: 判断是否是JPEG文件
//参数: SrcImage - 文件首地址
//返回值: 1: 是; 0: 否
//=============================================================
static int TFT_CheckIfJPEG(void *SrcImage)
{
unsigned char *pBuf = SrcImage;
int i = 1024;
while(i--)
{
if(*pBuf++ == 0xff)
if(*pBuf++ == 0xd8)
{
while(i--)
{
if(*pBuf++ == 'J')
if(*pBuf++ == 'F')
if(*pBuf++ == 'I')
if(*pBuf++ == 'F')
return 1;
}
}
}
return 0;
}
//=============================================================
//语法格式: int TFT_DepressJPEG(STR_IMAGE *DestImage, void *SrcJPEG)
//实现功能: 解压JPEG图像
//参数: DestImage - 解压之后的位图
// SrcJPEG - JPEG文件
//返回值: 1: 解压成功; 0: 解压失败
//=============================================================
static int TFT_DepressJPEG(STR_IMAGE *DestImage, void *SrcJPEG)
{
if(JPEG_GetPictureSize(SrcJPEG, &DestImage->Width, &DestImage->Height) == 0)
return 0;
return (JPEG_DepressPicture(SrcJPEG, DestImage->ImageBuf));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -