?? 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 + -