📄 fileoperation.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 + -