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

📄 jpegmath.cpp

📁 无线图象监控系统(用VC++编程)用数据库ACCESS存储图象
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		  {
		  case 2:	  
	   {	DWORD uu=codeadd;
		    uu=uu<<(24-cnl);
			r2=(BYTE*)(&uu);
			r1=*(r2+2);
		    jpegadd(r1,&jpegdatecode);
			r1=*(r2+1);
            jpegadd(r1,&jpegdatecode);
			r1=*r2;
			vlccnt=cnl-16; 
			break;
	   }
		  case 1: 		  
	   {  DWORD uu=codeadd;
	       uu=uu<<(16-cnl);
		   r2=(BYTE*)(&uu);
		    r1=*(r2+1);
             jpegadd(r1,&jpegdatecode);
			 r1=*r2;
			 vlccnt=cnl-8;
			 break;
	   }
		  case 0:{DWORD uu=codeadd;
		         uu=uu<<(8-cnl);
		         r2=(BYTE*)(&uu);
		        r1=*r2;
		        vlccnt=cnl;
		        break;
				 }

	   }
 }//if1
   else
   {         
       short dccoff;
       dccoff=qdct[0]-dcdiff;
       int dcdifflen;
	   dcdifflen=codelen(dccoff);
       if(dccoff<0)
	   {
	   dccoff=dcdiff-qdct[0];
	   dccoff=~dccoff;
	   dccoff=dccoff<<(16-dcdifflen);
	   dccoff=dccoff>>(16-dcdifflen);
	   } 
	   dcdiff=qdct[0];
	     vlclen=dccodelen[dcdifflen];
	   	 cnl=dcdifflen+vlclen+vlccnt;
	     r3=dchuff[dcdifflen];
		 r3=r3>>(16-vlclen);
		 codeadd=(DWORD)r1;
		 codeadd=codeadd>>(8-vlccnt);
		 codeadd=codeadd<<vlclen;
		 codeadd=codeadd|(DWORD)r3;
		 codeadd=codeadd<<dcdifflen;
		 codeadd=codeadd|(DWORD)dccoff;
		 sw=(int)(cnl/8);
	     switch (sw)
		 {
		 case 3:  {DWORD uu=(DWORD)codeadd;
		    uu=uu<<(32-cnl);
			r2=(BYTE*)(&uu);
			r1=*(r2+3);
		    jpegadd(r1,&jpegdatecode);
			r1=*(r2+2);
            jpegadd(r1,&jpegdatecode);
			r1=*(r2+1);
            jpegadd(r1,&jpegdatecode);
			r1=*r2;
			vlccnt=cnl-24;  
			break;
				  }
		 case 2: {DWORD uu=(DWORD)codeadd;
		          uu=uu<<(24-cnl);
			      r2=(BYTE*)(&uu);
			      r1=*(r2+2);
		          jpegadd(r1,&jpegdatecode);
			      r1=*(r2+1);
                  jpegadd(r1,&jpegdatecode);
			      r1=*r2;
			     vlccnt=cnl-16; 
				 break;
				 }
		 case 1:{DWORD uu=(DWORD)codeadd;
	             uu=uu<<(16-cnl);
		         r2=(BYTE*)(&uu);
		         r1=*(r2+1);
                 jpegadd(r1,&jpegdatecode);
			     r1=*r2;
			     vlccnt=cnl-8;
				 break;
				}
		 case 0:{DWORD uu=(DWORD)codeadd;
		         uu=uu<<(8-cnl);
		         r2=(BYTE*)(&uu);
		         r1=*r2;
		         vlccnt=cnl;
				 break;
				}
		 }
                  
   }
  //kaisi ac xishu
   int lencodesize=lencode->GetSize();
for(int y=0;y<lencodesize;y=y+2)
{         
	      int reg=lencode->GetAt(y);
		  if(reg==0xf0)
		  {
          vlclen=accodelen[reg];
          r3=achuff[reg];
           cnl=vlclen+vlccnt;
		  r3=r3>>(16-vlclen);
		 codeadd=(DWORD)r1;
		 codeadd=codeadd>>(8-vlccnt);
		 codeadd=codeadd<<vlclen;
		 codeadd=codeadd|(DWORD)r3;
		  y=y-1;
		  //AfxMessageBox("连续16个0");
		  }
		  else
	{//foesle
		  int acmcl=lencode->GetAt(y)&0x0f;//acmshuzichangdu
	      vlclen=accodelen[reg];
		  r3=achuff[reg];
           cnl=vlclen+vlccnt+acmcl;
		  r3=r3>>(16-vlclen);
		 codeadd=(DWORD)r1;
		 codeadd=codeadd>>(8-vlccnt);
		 codeadd=codeadd<<vlclen;
		 codeadd=codeadd|(DWORD)r3;
          if(reg!=0)
		  {
		 codeadd=codeadd<<acmcl;
		BYTE sign=lencode->GetAt(y+1);
		 BYTE lenbuf;
		  if(sign>=128)
		  {lenbuf=(BYTE)255-lencode->GetAt(y+1)+1;
		   lenbuf=(~lenbuf)&(0xff>>(8-acmcl));//可能有错
		  }
		  else
			lenbuf=sign;
	     codeadd=codeadd|(DWORD)lenbuf;
		  }
		  }//foelse
         sw=(int)(cnl/8);
	     switch (sw)
		 {
		 case 3:  {DWORD uu=(DWORD)codeadd;
		    uu=uu<<(32-cnl);
			r2=(BYTE*)(&uu);
			r1=*(r2+3);
		    jpegadd(r1,&jpegdatecode);
			r1=*(r2+2);
            jpegadd(r1,&jpegdatecode);
			r1=*(r2+1);
            jpegadd(r1,&jpegdatecode);
			r1=*r2;
			vlccnt=cnl-24;  
			break;
				  }
		 case 2: {DWORD uu=(DWORD)codeadd;
		          uu=uu<<(24-cnl);
			      r2=(BYTE*)(&uu);
			      r1=*(r2+2);
		          jpegadd(r1,&jpegdatecode);
			      r1=*(r2+1);
                  jpegadd(r1,&jpegdatecode);
			      r1=*r2;
			     vlccnt=cnl-16; 
				 break;
				 }
		 case 1:{DWORD uu=(DWORD)codeadd;
	             uu=uu<<(16-cnl);
		         r2=(BYTE*)(&uu);
		         r1=*(r2+1);
                 jpegadd(r1,&jpegdatecode);
			     r1=*r2;
			     vlccnt=cnl-8;
				 break;
				}
		 case 0:{DWORD uu=(DWORD)codeadd;
		         uu=uu<<(8-cnl);
		         r2=(BYTE*)(&uu);
		         r1=*r2;
		         vlccnt=cnl;
				 break;
				}
		 }
                  
   }


}//第二层循环 

} //最外层循环
jpegadd(r1,&jpegdatecode);
CByteArray*  jpegout=new CByteArray;
jpegout->Copy(jpegdatecode);
//delete pdibbitc;
AfxMessageBox("编码结束");
return jpegout;
}



 int nchange(BYTE len,WORD num)
 {  int kk;
	 if(len==0)
      kk=0;
	 else
	 {
	 WORD n;
   n=num>>(len-1);
   
  if(n==0)
  {num=~num;
   num=num<<(16-len);
   num=num>>(16-len);
   kk=(int)num;
	kk=0-kk;
  }
  else
   kk=(int)num;
	 }
return kk;
 }
struct mybitfields
{  unsigned char c : 6;
   unsigned char b:1;
   unsigned char a : 1;
 };
BOOL byteshift(BYTE* r,BYTE* phuf,int d)
{    int pbyte,pbit;
    pbyte=(int)(d/8);
	pbit=d%8;
	//BYTE* phuf=new BYTE[5];
	memcpy(phuf,r+pbyte,5);
    	for(int i=0; i<4; i++)
	{*(phuf+i)=*(phuf+i)<<pbit;
      BYTE temp;
	  temp=*(phuf+i+1);
	  temp=temp>>(8-pbit);
	  *(phuf+i)=*(phuf+i)|temp;
	}
    *(phuf+4)=*(phuf+4)<<d;
			return TRUE;
}
double* ziginverse(int zigdct[64])
{BOOL lc=TRUE;
int n,m;
	double* dctbit=new double[64];
int zig;
zig=0;
int offset;
    for(int x=0;x<=7;x++)
	{
      if(lc)
      lc=FALSE;
       else
      lc=TRUE;

      if(lc)
	 {
	   for(n=0;n<=x;n++)
	   {  offset=8*n+x-n;//[n][x-n]
		 *(dctbit+offset)=(double)(*(zigdct+zig));
            zig=zig+1;
      
	   }  
   
	}
    else
	{ for(m=0;m<=x;m++)
	{ offset=8*(x-m)+m;
    *(dctbit+offset)=(double)(*(zigdct+zig));
     zig=zig+1;
     
	}
	}
	}
     int l=1;
   for( x=8;x<=14;x++)
   { 
	   
	   if(lc)
      lc=FALSE;
       else
      lc=TRUE;

	 if(lc)
	 {
	  for(n=l;n<=x-l;n++)
	  {offset=8*n+x-n;//[n][x-n]
		*(dctbit+offset)=(double)(*(zigdct+zig));
	    zig=zig+1;
      
	  }
	 }
	 else
	 {
	  for(m=l;m<=x-l;m++)
	  { 
	  offset=8*(x-m)+m;
    *(dctbit+offset)=(double)(*(zigdct+zig));
	   zig=zig+1;
      
      }
	 }
	 l++;
    }
   return dctbit;
}
double c(int x)
{double y;
	if(x ==0 )
y= 0.707106781;
else
y=1;
return y;
}

BYTE byteadd(double u)
{ BYTE pix;
  int kk=(int)(u+128);
  if(kk<0)
	  kk=0;
  if(kk>255)
	  kk=255;
  pix=(BYTE)kk;
  return pix;
}
BYTE bytefix(double u)
{ BYTE pix;
  int kk=(int)u;
  if(kk<0)
	  kk=0;
  if(kk>255)
	  kk=255;
  pix=(BYTE)kk;
  return pix;
}
BYTE byteadd(int u)
{ BYTE pix;
    if(u<0)
	  u=0;
  if(u>255)
	  u=255;
  pix=(BYTE)u;
  return pix;
}
BOOL ytableinit(WORD* dchuffbef,WORD* andbuf,BYTE* dccode,BYTE* accodelen,WORD* acandbuf,WORD* achuff,BYTE* dd,BYTE* hub)
{ 
WORD temp[12]={0x0000,0x4000,0x6000,0x8000,0xa000,0xc000,0xe000,0xf000,0xf800,0xfc00,0xfe00,0xff00};
memcpy(dchuffbef,temp,12*sizeof(WORD));

WORD temp0[12]={0xc000,0xe000,0xe000,0xe000,0xe000,0xe000,0xf000,0xf800,0xfc00,0xfe00,0xff00,0xff80};
memcpy(andbuf,temp0,12*sizeof(WORD));
BYTE temp1[12]={2,3,3,3,3,3,4,5,6,7,8,9};
memcpy(dccode,temp1,12);
BYTE temp2[37]={2,2,3,4,4,4,5,5,
		              5,6,6,7,7,7,7,8,
				8,8,9,9,9,9,9,10,
					10,10,10,10,11,11,11,11,
					12,12,12,12,15};
memcpy(accodelen,temp2,37);
WORD temp3[37]={ 0xc000,0xc000,0xe000,0xf000,0xf000,0xf000,0xf800,0xf800,
						0xf800,0xfc00,0xfc00,0xfe00,0xfe00,0xfe00,0xfe00,0xff00,
						0xff00,0xff00,0xff80,0xff80,0xff80,0xff80,0xff80,0xffc0,
						0xffc0,0xffc0,0xffc0,0xffc0,0xffe0,0xffe0,0xffe0,0xffe0,
						0xfff0,0xfff0,0xfff0,0xfff0,0xfffe};
memcpy(acandbuf,temp3,37*sizeof(WORD));
WORD temp4[37]={0x0000,0x4000,0x8000,0xa000,0xb000,0xc000,0xd000,0xd800,
		             0xe000,0xe800,0xec00,0xf000,0xf200,0xf400,0xf600,0xf800,
					 0xf900,0xfa00,0xfb00,0xfb80,0xfc00,0xfc80,0xfd00,0xfd80,
					 0xfdc0,0xfe00,0xfe40,0xfe80,0xfec0,0xfee0,0xff00,0xff20,
					 0xff40,0xff50,0xff60,0xff70,0xff80};
memcpy(achuff,temp4,37*sizeof(WORD));
BYTE temp5[37]={ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
      0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
      0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
      0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
      0x24, 0x33, 0x62, 0x72, 0x82};
  memcpy(dd,temp5,37);
    BYTE temp6[125]={0x09, 0x0a, 0x16,
      0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
      0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
      0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
      0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
      0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
      0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
      0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
      0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
      0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
      0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
      0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
      0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
      0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
      0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
      0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
      0xf9, 0xfa};
memcpy( hub,temp6,125);
  return TRUE;
}

BOOL uvtableinit(WORD dchuffbef[12],WORD andbuf[12],BYTE dccode[12],BYTE accodelen[43],WORD acandbuf[43],WORD achuff[43],BYTE dd[43],BYTE hub[119])
{ 
WORD temp[12]={0x0000,0x4000,0x8000,0xc000,0xe000,0xf000,0xf800,0xfc00,0xfe00,0xff00,0xff80,0xffc0};
  memcpy(dchuffbef,temp,12*sizeof(WORD));

WORD temp0[12]={0xc000,0xc000,0xc000,0xe000,0xf000,0xf800,0xfc00,0xfe00,0xff00,0xff80,0xffc0,0xffe0};
memcpy(andbuf,temp0,12*sizeof(WORD));
BYTE temp1[12]={2,2,2,3,4,5,6,7,8,9,10,11};
memcpy(dccode,temp1,12);
BYTE temp2[43]={ 2,2,3,4,4,5,5,5,5,6,
		         6,6,6,7,7,7,8,8,8,8,
				 9,9,9,9,9,9,9,10,10,10,
				 10,10,11,11,11,11,12,12,
						  12,12,14,15,15};
          memcpy(accodelen,temp2,43);
		  WORD temp3[43]={0xc000,0xc000,0xe000,0xf000,0xf000,0xf800,0xf800,0xf800,
			              0xf800,0xfc00,0xfc00,0xfc00,0xfc00,0xfe00,0xfe00,0xfe00,
						0xff00,0xff00,0xff00,0xff00,0xff80,0xff80,0xff80,0xff80,
						0xff80,0xff80,0xff80,0xffc0,0xffc0,0xffc0,0xffc0,0xffc0,
						0xffe0,0xffe0,0xffe0,0xffe0,0xfff0,0xfff0,0xfff0,0xfff0,
						0xfffc,0xfffe,0xfffe};
memcpy(acandbuf,temp3,43*sizeof(WORD));
WORD temp4[43]={0x0000,0x4000,0x8000,0xa000,0xb000,0xc000,0xc800,0xd000,0xd800,0xe000,
                0xe400,0xe800,0xec00,0xf000,0xf200,0xf400,0xf600,0xf700,0xf800,0xf900,
			    0xfa00,0xfa80,0xfb00,0xfb80,0xfc00,0xfc80,0xfd00,0xfd80,0xfdc0,0xfe00,
			    0xfe40,0xfe80,0xfec0,0xfee0,0xff00,0xff20,0xff40,0xff50,0xff60,0xff70,
			    0xff80,0xff84,0xff86};
memcpy(achuff,temp4,43*sizeof(WORD));
BYTE temp5[43]=	   {0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,
	                0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,
					0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,
                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,
	                0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,
	               0xe1,0x25,0xf1}; 
 memcpy(dd,temp5,43);
  BYTE temp6[119]={0x17,0x18,0x19,0x1a,0x26,0x27,0x28,0x29,0x2a,0x35,
	               0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,
				  0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
				   0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,
				  0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,
				 0x85,0x86,0x87,0x88,0x89,0x8a,0x92,0x93,0x94,0x95,
				 0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,
				 0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,
				 0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,
				 0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,
				 0xda,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,
				 0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa};
memcpy(hub,temp6,119);
return TRUE;
}

int*  Oneblock(int* qutable,int& block,WORD* dchuffbef,WORD* andbuf,BYTE* dccode,BYTE* accodelen,WORD* acandbuf,WORD* achuff,BYTE* dd,BYTE* hub,BYTE *jpegc,BYTE *jpegcode,int &dccoff,int &dc,int dct[64],int &shiftnumber,int acminlen,WORD a,WORD b,int eob)
{ WORD r1;
  WORD r2;
  WORD r3;
  int k1;
  int k2;
     int point=0;   
     BYTE i=0;
    
	bool juge;
	juge=false;
  int shiftsum;

	while(!juge) //dc 系数解码
	{ r2=*(jpegcode);
      r2=r2<<8;
	  r2=r2|(WORD)(*(jpegcode+1));
	  r3=r2&andbuf[i];
      juge=(r3==dchuffbef[i]);
        if(juge)
			{    shiftnumber+=dccode[i];
			  byteshift(jpegc,jpegcode,shiftnumber);//if1
			  shiftsum=dccode[i];
			       r1=*(jpegcode);
                   r1=r1<<8;
	               r2=r1|(WORD)(*(jpegcode+1));
				   r2=r2>>(16-i);
				  dccoff=nchange(i,r2);
				  if(block==0)
				 {
				  dct[0]=dccoff;
				 dc=dccoff;
				 }
				else
				 {dct[0]=dccoff+dc;
				  dc=dct[0];
				 }
                  shiftnumber+=i;
				  byteshift(jpegc,jpegcode,shiftnumber);
				
             point++;
		}
		i++;
	}
//CString dct0;
//dct0.Format("%d",dct[0]);
//	AfxMessageBox(dct0);

 //AfxMessageBox("blockjiemakaishi");
		while(point<64)
	{           //mcu ac系数解码开始
     //ac 系数解码
     
	 
    bool aclg=false;
    int j;
     j=0;
 int jjj=0;
     while(!aclg)
	{    
	  r2=*(jpegcode);
      r2=r2<<8;
	  r2=r2|(WORD)(*(jpegcode+1));
	  r3=r2&acandbuf[j];
	  aclg=(r3==achuff[j]);
	 
	  //
		  if(aclg)
		  { //AfxMessageBox("acjiemakaishi"); 
			  jjj=j;

⌨️ 快捷键说明

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