📄 getresourcedlg.cpp
字号:
resOutputFile(pData,segLen,FILE_TYPE_BMP);
free(pData);
return posStart+segLen;
}
free(pData);
return posStart+1;
}
long CGetResourceDlg::resSaveGIF(FILE* fp,long posStart,long len)
{
uChar* pData;
uChar tempBuf[3040];
long seglen = 0;
long temlen = 0;
int temp ;
int n ;
int status = 0;
int pos = 0;
char tm ='0';
fseek(fp,posStart,SEEK_SET);
memset(tempBuf,0,3040);
while(pos+posStart<len)
{
temp = fread(tempBuf,1,3000,fp);
n = 0;
while(n<temp)
{
seglen ++;
if(tempBuf[n] == 0x3B)//find the end
{
if(n==0)
{
if(tm ==0)
{ status = 1;
break;
}
}
else
{
if(tempBuf[n-1] ==0)
{
status = 1;
break;
}
}
}
n++;
}
tm = tempBuf[temp-1];// save the last character
pos += temp;
if(status)
{
break;
}
}
if(!status)// donot find
{
return posStart+1;
}
if(seglen >3*1024*1024)
return posStart+1;//最大为3MB
pData = (uChar *)malloc(seglen+8);
memset(pData,0,seglen+8);
fseek(fp,posStart,SEEK_SET);
temlen = fread(pData,1,seglen,fp);
char a = pData[seglen-1];
char b = pData[seglen-2];
if(temlen == seglen)
{
resOutputFile(pData,seglen,FILE_TYPE_GIF);
char ch = pData[seglen-1];
free(pData);
return posStart+seglen;
}
free(pData);
return posStart+1;
}
long CGetResourceDlg::resSavePNG(FILE* fp,long posStart,long len)
{
uChar* pData;
uChar tempBuf[3040];
long seglen = 0;
long temlen = 0;
int temp ;
int n ;
int status = 0;
int pos = 0;
char tm[3] ={0,0,0};
fseek(fp,posStart,SEEK_SET);
memset(tempBuf,0,3040);
while(pos+posStart<len)
{
temp = fread(tempBuf,1,3000,fp);
n = 0;
while(n<temp)
{
seglen ++;
if(n ==0)
{
if(tm[0]==0x49 && tm[1]==0x45 && tm[2]==0x4E && tempBuf[n]==0x44)
{
status = 1;
seglen +=7;
break;
}
}
else
if(n==1)
{
if(tm[1]==0x49 && tm[2]==0x45 && tempBuf[0]==0x4E && tempBuf[1]==0x44)
{
status = 1;
seglen +=6;
break;
}
}
else
if(n==2)
{
if(tm[2]==0x49 && tempBuf[0]==0x45 && tempBuf[1]==0x4E && tempBuf[2]==0x44)
{
status = 1;
seglen +=5;
break;
}
}
else
{
if(tempBuf[n-3]==0x49 && tempBuf[n-2]==0x45 && tempBuf[n-1]==0x4E && tempBuf[n]==0x44)
{
status = 1;
seglen +=4;
break;
}
}
n++;
}
tm[0] = tempBuf[temp-3];
tm[1] = tempBuf[temp-2];
tm[2] = tempBuf[temp-1];
pos += temp;
if(status)
{
break;
}
}
if(!status)//do not find
{
return posStart+1;
}
if(seglen >3*1024*1024)
return posStart+1;//最大为3MB
pData = (uChar *)malloc(seglen+8);
memset(pData,0,seglen+8);
fseek(fp,posStart,SEEK_SET);
temlen = fread(pData,1,seglen,fp);
if(temlen == seglen)
{
resOutputFile(pData,seglen,FILE_TYPE_PNG);
char ch = pData[seglen-1];
free(pData);
return posStart+seglen;
}
free(pData);
return posStart+1;
}
long CGetResourceDlg::resSaveJPEG(FILE* fp,long posStart,long len)
{
int temLen;
long pos;
uChar* pData;
long segLen;
int bJPEG=0;
segLen = 3*1024*1024;//默认最大为3MB.
pData = (uChar*)malloc(segLen);
if(!pData) return posStart+1;
memset(pData,0,segLen);
fseek(fp,posStart,SEEK_SET);
segLen = fread(pData,1,segLen,fp);
pos = 2;
while(pData[pos] == 0xff)
{
if(pData[pos+1] == 0xda)
bJPEG = 1;
//先求这部分长度
temLen = (pData[pos+2]<<8) +pData[pos+3];
temLen += 2;
pos += temLen;
if(pos > segLen)
{
free(pData);
return (posStart+1);
}
}
while(bJPEG && pos < segLen)
{
if(pData[pos]==0xff && pData[pos+1]==0xd9)
{//JPEG
resOutputFile(pData,pos+2,FILE_TYPE_JPEG);
free(pData);
return posStart+pos+1;
}
pos++;
}
free(pData);
return posStart+1;
}
long CGetResourceDlg::resSaveWAV(FILE *fp,long posStart,long len)
{
unsigned char * buf;
unsigned long seglen = 0;
unsigned long temlen = 0;
unsigned char data[8];
unsigned long *formatlen ;
unsigned long *datalen;
// process format chunk
fseek(fp,posStart+4,SEEK_SET);
fread(data,1,8,fp);
if(strnicmp((char *)data,"fmt ",4)!=0)
{
return posStart + 1 ;
}
formatlen = (unsigned long *)(data+4);
seglen =seglen+ (*formatlen)+8+4;
// process data chunk
fseek(fp,posStart+seglen,SEEK_SET);
fread(data,1,8,fp);
if(strnicmp((char *)(data),"data",4)!=0)
{
return posStart +1 ;
}
datalen =(unsigned long *)(data+4);
seglen = seglen+ (*datalen )+ 8;
buf = (unsigned char *)malloc(seglen+8);
memset(buf,0,seglen+8);
fseek(fp,posStart-8,SEEK_SET);
temlen = fread(buf,1,seglen,fp);
if(temlen == seglen)
{
resOutputFile(buf,seglen,FILE_TYPE_WAV);
free(buf);
return posStart + seglen;
}
free(buf);
return posStart+1;
}
long CGetResourceDlg::resSaveMP3(FILE *fp,long posStart,long len)
{
unsigned char * buf;
int seglen=0;
int temlen=0;
unsigned char data[4] ={0,0,0,0};
int version= 0;
int lay = 0;
int error = 0;
int bitrate= 0;
int sampling =0;
int padding = 0;
int extension = 0;
long pos = posStart;
int status = 0;
fseek(fp,posStart,SEEK_SET);
while(pos<len)
{
fseek(fp,pos,SEEK_SET);
fread(data,1,4,fp);
if(!strncmp((char *)data,"TAG",3))
{
pos +=128;
status = 1;
break;
}
if(data[0] !=0xff || (data[1] & 0xf0)!= 0xf0)
{
return posStart +1;
}
version = (data[1]&0x08)>>3;
if(version ==0)
{
version = MPEG2;
}
else
{
version = MPEG1;
}
lay = (data[1]&0x06)>>1;
if(lay == 1)
lay = LAYER3;
else if(lay == 2)
lay = LAYER2;
else
if(lay == 3)
lay = LAYER1;
else return posStart+1;
error = (data[1]&0x01);
bitrate = (data[2]&0xf0)>>4;
if(bitrate ==0||bitrate==0x0f)
{
return posStart+1;
}
bitrate --;
sampling = (data[2]&0x0c)>>2;
if(sampling == 3)
return posStart+1;
padding = (data[2]&0x02)>>1;
extension = (data[1]&0x01);
seglen = COUNT_FRAME_SIZE(BITRATE[version][lay][bitrate],SAMPLING_FREQ[version][sampling],padding);
pos +=seglen;
}
if(!status)
return posStart+1;
seglen = pos - posStart;
fseek(fp,posStart,SEEK_SET);
buf = (unsigned char *)malloc(seglen+8);
memset(buf,0,seglen+8);
temlen = fread(buf,1,seglen,fp);
if(temlen == seglen)
{
resOutputFile(buf,seglen,FILE_TYPE_MP3);
free(buf);
return posStart +seglen;
}
free(buf);
return posStart+1;
}
void CGetResourceDlg::resOutputFile(uChar* data,unsigned long len,long flag)
{
FILE* fp;
CString strFileName;
strFileName.Empty();
switch(flag)
{
case FILE_TYPE_JPEG:
strFileName.Format("%s\\%d.jpg",m_strOutputPath,m_outNumber++);
break;
case FILE_TYPE_BMP:
strFileName.Format("%s\\%d.bmp",m_strOutputPath,m_outNumber++);
break;
case FILE_TYPE_GIF:
strFileName.Format("%s\\%d.gif",m_strOutputPath,m_outNumber++);
break;
case FILE_TYPE_PNG:
strFileName.Format("%s\\%d.png",m_strOutputPath,m_outNumber++);
break;
case FILE_TYPE_MP3:
strFileName.Format("%s\\%d.mp3",m_strOutputPath,m_outNumber++);
break;
case FILE_TYPE_WAV:
strFileName.Format("%s\\%d.WAV",m_strOutputPath,m_outNumber++);
break;
default:
return;
}
fp = fopen(strFileName,"wb");
if(!fp) return;
fwrite(data,len,1,fp);
fclose(fp);
}
void CGetResourceDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -