線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:794
推到 Plurk!
推到 Facebook!

請教彩色片處理問題

尚未結案
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-27 19:43:18 IP:220.141.xxx.xxx 未訂閱
大家好 我做了一個彩色圖片的BTC壓縮程式 大致上是把R,G,B的值利用GetRValue(),GetGValue(),GetBValue()取出後再利用BTC的原理處理 但是回復後影像的彩色看起來怪怪的 不知問題出在哪 請指導 謝謝
 
Image1->Picture->Bitmap->LoadFromFile("lenac.bmp");
       Bmp1->Assign(Image1->Picture->Bitmap);
       Bmp2->Assign(Image1->Picture->Bitmap);
       Bmp3->Assign(Image1->Picture->Bitmap);                 e=0;                                         //壓縮
        for(int i=0;i<512;i =4)
        {
                for(int j=0;j<512;j =4)
                {       average_x_r,average_x_g,average_x_b=0;
                        lowerlevel_r,lowerlevel_g,lowerlevel_b=0;
                        upperlevel_r,upperlevel_g,upperlevel_b=0;                            lowerlevel_count_r,lowerlevel_count_g,lowerlevel_count_b=0;
                        upperlevel_count_r,upperlevel_count_g,upperlevel_count_b=0;
                        sum_lowerlevel_r,sum_lowerlevel_g,sum_lowerlevel_b=0;
                        sum_upperlevel_r,sum_upperlevel_g,sum_upperlevel_b=0;
                        block_sum_r,block_sum_g,block_sum_b=0;                            for(int m=0;m<4;m  )
                        for(int n=0;n<4;n  )
                   {
                        pr[i m][j n]=GetRValue(Bmp1->Canvas->Pixels[i m][j n]);
                        block_sum_r =pr[i m][j n];
                        pg[i m][j n]=GetGValue(Bmp1->Canvas->Pixels[i m][j n]);
                        block_sum_g =pg[i m][j n];
                        pb[i m][j n]=GetBValue(Bmp1->Canvas->Pixels[i m][j n]);
                        block_sum_b =pb[i m][j n];                       }
                        average_x_r=block_sum_r/16;
                        average_x_g=block_sum_g/16;
                        average_x_b=block_sum_b/16;                            for(int m=0;m<4;m  )
                        for(int n=0;n<4;n  )
                   {
                     if( pr[i m][j n]<=average_x_r)
                             {
                                sum_lowerlevel_r =pr[i m][j n];
                                lowerlevel_count_r  ;
                              }
                     if( pr[i m][j n]>average_x_r)
                             {
                                sum_upperlevel_r =pr[i m][j n];
                                upperlevel_count_r  ;
                              } //                          if( pg[i m][j n]<=average_x_g)
                             {
                                sum_lowerlevel_g =pg[i m][j n];
                                lowerlevel_count_g  ;
                              }
                     if( pg[i m][j n]>average_x_g)
                             {
                                sum_upperlevel_g =pg[i m][j n];
                                upperlevel_count_g  ;
                              }//                          if( pb[i m][j n]<=average_x_b)
                             {
                                sum_lowerlevel_b =pb[i m][j n];
                                lowerlevel_count_b  ;
                              }
                     if( pr[i m][j n]>average_x_b)
                             {
                                sum_upperlevel_b =pb[i m][j n];
                                upperlevel_count_b  ;
                              }                           }                               lowerlevel_r=sum_lowerlevel_r/lowerlevel_count_r;
                        if(upperlevel_count_r==0)
                           upperlevel_r=lowerlevel_r;
                        else
                            upperlevel_r=sum_upperlevel_r/upperlevel_count_r;                                lowerlevel_g=sum_lowerlevel_g/lowerlevel_count_g;
                        if(upperlevel_count_g==0)
                           upperlevel_g=lowerlevel_g;
                        else
                            upperlevel_g=sum_upperlevel_g/upperlevel_count_g;                             lowerlevel_b=sum_lowerlevel_b/lowerlevel_count_b;
                        if(upperlevel_count_b==0)
                           upperlevel_b=lowerlevel_b;
                        else
                            upperlevel_b=sum_upperlevel_b/upperlevel_count_b;                                upper_level_r[e]=upperlevel_r;
                        lower_level_r[e]=lowerlevel_r;
                        block_average_r[e]=average_x_r;                            upper_level_g[e]=upperlevel_g;
                        lower_level_g[e]=lowerlevel_g;
                        block_average_g[e]=average_x_g;                            upper_level_b[e]=upperlevel_b;
                        lower_level_b[e]=lowerlevel_b;
                        block_average_b[e]=average_x_b;
                          e  ;                   }
        }
      
}
//---------------------------------------------------------------------------    void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
        int e=0;
                                  //還原
        for(int i=0;i<512;i =4)
        for(int j=0;j<512;j =4 )
        {
                for(int m=0;m<4;m  )
                {
                        for(int n=0;n<4;n  )                            {
                                p1_r[i m][j n]=GetRValue(Bmp3->Canvas->Pixels[i m][j n]);                                    if   (p1_r[i m][j n]>block_average_r[e])
                                        p1_r[i m][j n]=upper_level_r[e];
                                else
                                        p1_r[i m][j n]=lower_level_r[e];                                   p1_g[i m][j n]=GetGValue(Bmp3->Canvas->Pixels[i m][j n]);                                    if   (p1_g[i m][j n]>block_average_g[e])
                                        p1_g[i m][j n]=upper_level_g[e];
                                else
                                        p1_g[i m][j n]=lower_level_g[e];                                    p1_b[i m][j n]=GetBValue(Bmp3->Canvas->Pixels[i m][j n]);                                    if   (p1_b[i m][j n]>block_average_b[e])
                                        p1_b[i m][j n]=upper_level_b[e];
                                else
                                        p1_b[i m][j n]=lower_level_b[e];                                   Bmp2->Canvas->Pixels[i m][j n]=RGB(p1_r[i m][j n],p1_g[i m][j n],p1_b[i m][j n]);
                        }                        }e  ;   
        }       Image2->Picture->Assign(Bmp2);
系統時間:2024-06-18 0:42:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!