2007年7月26日 星期四

DCT-DrawYCbCr

int Ymin=0,Cbmin=0,Crmin=0,Ymax=0,Cbmax=0,Crmax=0;
for( i=0 ; i<Im1H ; i++ ){
  for( j=0 ; j<Im1W ; j++ )
  {
   if(Im1QuaY[i][j]<Ymin)
     Ymin=Im1QuaY[i][j];//Y min after DCT
   if(Im1QuaCb[i][j]<cbmin)
     Cbmin=Im1QuaCb[i][j];//Cb min after DCT
   if(Im1QuaCr[i][j]<Crmin)
     Crmin=Im1QuaCr[i][j]; //Cr min after DCT
   if(Im1QuaY[i][j]>Ymax)
     Ymax=Im1QuaY[i][j]; //Y max after DCT
   if(Im1QuaCb[i][j]>Cbmax)
     Cbmax=Im1QuaCb[i][j]; //Cb max after DCT
   if(Im1QuaCr[i][j]>Crmax)
     Crmax=Im1QuaCr[i][j]; //Cr max afterDCT  }}  
/******************************************************  
*求出Y,Cb,Cr最大最小值後,換算該範圍  
*用於調整長條圖的對稱性  
*******************************************************/
  if(Ymax>abs(Ymin)){
    DCTYrange=Ymax*2;
    YRange=Ymax;
  }
  else{
    DCTYrange=abs(Ymin)*2;
    YRange=abs(Ymin);
  }
  if(Cbmax>abs(Cbmax)){
    DCTCbrange=Cbmax*2;
    CbRange=Cbmax;
  }
  else{
    DCTCbrange=abs(Cbmin)*2;
    CbRange=abs(Cbmin);
  }
  if(Crmax>abs(Crmin)){
    DCTCrrange=Crmax*2;
    CrRange=Crmax;
  }
  else{
    DCTCrrange=abs(Crmin)*2;
    CrRange=abs(Crmin);
  }
  //DCTYrange = Ymax-Ymin;
  //DCTCbrange= Cbmax-Cbmin;
  //DCTCrrange= Crmax-Crmin;
  //↑要改一下....因為這樣左右不平衡....囧
  RecordY=new int[DCTYrange];
  RecordCb=new int[DCTCbrange];
  RecordCr=new int[DCTCrrange];
  for(i=0;i<DCTYrange;i++)
  RecordY[i]=0;
  for(i=0;i<DCTCbrange;i++)
  RecordCb[i]=0;
  for(i=0;i<DCTCrrange;i++)
  RecordCr[i]=0;
  //計算Histogram的高度
  for( i=0 ; i<Im1H; i++ )
  for( j=0 ; j<Im1W; j++ )
  {
    tempY=Im1QuaY[i][j] + YRange ;
    RecordY[ tempY ]++;
    tempCb=Im1QuaCb[i][j] + CbRange;
    RecordCb[ tempCb ]++;
    tempCr=Im1QuaCr[i][j] + CrRange;
    RecordCr[ tempCr ]++;
  }
  Ymax=0;Cbmax=0;Crmax=0;
  for( i=0 ; i<DCTYrange ; i++ )
  {
    if(RecordY[i]>Ymax)
    Ymax=RecordY[i];
  }
  for( i=0 ; i<DCTCbrange ; i++ )
  {
    if(RecordCb[i]>Cbmax)
    Cbmax=RecordCb[i];
  }
  for( i=0 ; i
  {
    if(RecordCr[i]>Crmax)
    Crmax=RecordCr[i];
  }
  Image5->Picture->Bitmap->Width= DCTYrange*2;
  Image5->Picture->Bitmap->Height=Ymax;
  Image5->Picture->Bitmap->PixelFormat=pf24bit;
  Image5->AutoSize=true;
  Image6->Picture->Bitmap->Width=DCTCbrange*2;
  Image6->Picture->Bitmap->Height=Cbmax;
  Image6->Picture->Bitmap->PixelFormat=pf24bit;
  Image6->AutoSize=true;

  Image7->Picture->Bitmap->Width=DCTCrrange*2;
  Image7->Picture->Bitmap->Height=Crmax;
  Image7->Picture->Bitmap->PixelFormat=pf24bit;
  Image7->AutoSize=true;
  for( i=0 ; i<DCTYrange ; i++ )
  {
    j=RecordY[i];
    k=Ymax;
    Image5->Canvas->MoveTo(i*2,k);
    Image5->Canvas->LineTo(i*2,k-j);
  }  for( i=0 ; i<DCTCbrange ; i++ )
  {
    j=RecordCb[i];
    k=Cbmax;
    Image6->Canvas->MoveTo(i*2,k);
    Image6->Canvas->LineTo(i*2,k-j);
  }
  for( i=0 ; i<DCTCrrange ; i++ )
  {
    j=RecordCr[i];
    k=Crmax;
    Image7->Canvas->MoveTo(i*2,k);
    Image7->Canvas->LineTo(i*2,k-j);
  }

沒有留言: