請教彩色片處理問題 |
尚未結案
|
pork
一般會員 發表:15 回覆:13 積分:5 註冊:2003-10-25 發送簡訊給我 |
大家好
我做了一個彩色圖片的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); |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |