📄 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_CheckIfJPEG, TFT_DepressJPEG}, {TFT_CheckIfBitMap, TFT_DepressBitMap},};//=============================================================//语法格式: 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 + -