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

📄 fileoperation.c

📁 JPEG压缩编码在TMS320VC5509的实现代码。使用编译器为ccs2.2
💻 C
字号:
//FileOperation.c
#include "BasicDefinition.h"


long m_nFileSize;//文件长度
FILE *fp1;
BOOL m_bAlreadyOpen;//没有打开文件


#pragma DATA_SECTION(StrOpenFileFail,".notice");//不能打开文件
char StrOpenFileFail[] = "\n Can't open file \n ";

#pragma DATA_SECTION(StrOpenFileSuccess,".notice");//成功打开文件
char StrOpenFileSuccess[] = "\n Successfully open file \n "; 

#pragma DATA_SECTION(StrFilePath,".notice");
char StrFilePath[] = "C:\\cccss.bmp";//dogbig2.bmp";//cccss.bmp";//D:\\TiCup\\TiCupDspWork\\boot55\\TEST_0.BIN";//test14y.bin";//HEX2BIN.EXE";//test14.bin";//TEST_0.BIN";

#pragma DATA_SECTION(StrFileOperation,".notice");//以只读方式打开二进制文件
char StrFileOperation[] = "rb";

#pragma DATA_SECTION(StrFilePath2,".notice");
char StrFilePath2[] = "C:\\dogbigtest.bmp";

#pragma DATA_SECTION(StrFileOperation2,".notice");//以写方式打开二进制文件
char StrFileOperation2[] = "wb";

#pragma DATA_SECTION(StrFilePath3,".notice");
char StrFilePath3[] = "C:\\DspJpegTest.jpg";


extern BYTE DDC4[0x400];
extern BYTE RMartix[0x4000];
extern BYTE GMartix[0x4000];
extern BYTE BMartix[0x4000];
extern UINT m_nErrorCode;//前面操作的错误代码
extern UINT ImageWidth;
extern UINT ImageHight;
extern unsigned long ImageBufSize;
extern BYTE JpegInfo[607];
extern void ClearStReg(void);


BOOL LoadFile(void)
{
	if ((fp1=fopen(StrFilePath,StrFileOperation)) == NULL)
	{
		puts(StrOpenFileFail);
		return 0;
	}
	else
	{
		//文件打开成功后初始化各种变量
		m_nFileSize = 0;//文件长度	
		//下面计算文件的长度
		CountFileSize(fp1,&m_nFileSize);
		rewind(fp1);
		puts(StrOpenFileSuccess);
		printf(" File size is %ld bytes\n",m_nFileSize);
		return 1;	
	} 	
}


void CountFileSize(FILE* fp,long* FileSize)
{	
	fseek(fp,0,2);//这种方式更快
	*FileSize = ftell(fp);	
}


BOOL SaveFile(void)
{
	BYTE tmpbuf[3];
	unsigned long tmp1,tmp2;
	int m_nIndexFix;
	BYTE *pRMartix,*pGMartix,*pBMartix;
	BYTE fillbuf[4];
	unsigned long k;
	UINT i,j;
	
	ClearStReg();
	
	if(m_nErrorCode == K_OPERATION_SUCCESS)
	{
		if ((fp1=fopen(StrFilePath2,StrFileOperation2)) == NULL)
		{
			puts(StrOpenFileFail);
			return 0;
		}
		else
		{
			fwrite(DDC4,sizeof(BYTE),54,fp1);
			
			tmp1 = (unsigned long)(ImageWidth)*3;
			tmp2 = (tmp1>>2)<<2;
			m_nIndexFix =  (int)(tmp2 - tmp1);//每一行的RGB数据不满4的整数倍时需要补充的数据个数
			if(m_nIndexFix < 0)
			{
				m_nIndexFix += 4;
				fillbuf[0] = 0;
				fillbuf[1] = 0;
				fillbuf[2] = 0;
				fillbuf[3] = 0;
			}

			for(i=0;i<ImageHight;i++)
			{
				k = ((unsigned long)(ImageHight - i - 1)) * ((unsigned long)ImageWidth);;
				pRMartix = RMartix + k;
				pGMartix = GMartix + k;
				pBMartix = BMartix + k;
				
				for(j=0;j<ImageWidth;j++)
				{
					tmpbuf[0] = *pBMartix++;
					tmpbuf[1] = *pGMartix++;
					tmpbuf[2] = *pRMartix++;
					fwrite(tmpbuf,sizeof(BYTE),3,fp1);
				}					
				fwrite(fillbuf,sizeof(BYTE),m_nIndexFix,fp1);					
			}
			
			fclose(fp1);
			
			return K_OPERATION_SUCCESS;	
		}
	}
	else
	{
		return K_STOP_DU_TO_PREVIOUS_ERROR;
	}				
}


BOOL LoadBasicBuffer(void)//用于初始化文件信息
{
	UINT i;

	if(m_bAlreadyOpen == 1)
	{
		rewind(fp1);

		for(i=0;i<0x36;i++)//去掉文件头	
		{	
			DDC4[i] = fgetc(fp1);
		}
				
		return K_OPERATION_SUCCESS;	
	}
	else
		return K_FILE_NOT_OPEN_ERROR;
}

BOOL LoadBuffer(void)
{
	BYTE *pRMartix,*pGMartix,*pBMartix;
	unsigned long tmp1,tmp2;
	int m_nIndexFix,m_nIndexFixTmp;
	unsigned long k;
	UINT i,j;
	
	if(m_nErrorCode == K_OPERATION_SUCCESS)
	{
		tmp1 = (unsigned long)(ImageWidth)*3;
		tmp2 = (tmp1>>2)<<2;
		m_nIndexFix =  (int)(tmp2 - tmp1);//每一行的RGB数据不满4的整数倍时需要补充的数据个数
		if(m_nIndexFix < 0)
		{
			m_nIndexFix += 4;
		}
		m_nIndexFixTmp = m_nIndexFix;
		
		if(ImageBufSize < 0x10000)
		{
			for(i=0;i<ImageHight;i++)
			{
				k = ((unsigned long)(ImageHight - i - 1)) * ((unsigned long)ImageWidth);
				pRMartix = RMartix + k;
				pGMartix = GMartix + k;
				pBMartix = BMartix + k;
				
				for(j=0;j<ImageWidth;j++)
				{
					*pBMartix++ = fgetc(fp1);
					*pGMartix++ = fgetc(fp1);	
					*pRMartix++ = fgetc(fp1);			
				}
				while(m_nIndexFixTmp!=0)
				{
					tmp1 = fgetc(fp1);
					m_nIndexFixTmp--;
				}
				m_nIndexFixTmp = m_nIndexFix;
			}
				
		}
		
		fclose(fp1);
		m_bAlreadyOpen = 0;
		return K_OPERATION_SUCCESS;
	}
	else
	{
		return K_FILE_NOT_OPEN_ERROR;
	}
}



BOOL CreateFile(void)
{
	ClearStReg();

	if(m_nErrorCode == K_OPERATION_SUCCESS)
	{
		if ((fp1=fopen(StrFilePath3,StrFileOperation2)) == NULL)
		{
			puts(StrOpenFileFail);
			
			return K_CREATE_FILE_FAIL;
		}
		else
		{
			JpegHeadWrite(fp1);
			
			return K_OPERATION_SUCCESS;
		}
	}
	else
	{
		return K_STOP_DU_TO_PREVIOUS_ERROR;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -