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

📄 tft_imgcontrol.c

📁 用OV7720制作摄像头的详细电路原理图
💻 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 + -