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

📄 getresourcedlg.cpp

📁 获取任何文件中的图片信息,质量越高得到的图片越多。
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	

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