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

請問各位高手有關繪圖的問題

尚未結案
perking
一般會員


發表:9
回覆:5
積分:2
註冊:2004-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-30 16:19:38 IP:220.130.xxx.xxx 未訂閱
今天我已經從一張bmp圖片中把pixel的RGB值取出,現在要把RGB放到一個3D的圖中,其中,三個軸分別為R軸 G軸 B軸,              R |                |                   |                 |____________ G                /               /             B/                         那麼我該怎麼處理呢? 還有,今天我想要把pixel放到R-G平面,R-B平面,B-G平面中 這樣我該怎麼做呢?    以下是我自己寫的程式碼不知道是怎麼回是跑出來都是怪怪的         
 
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{    
/*我把程式碼省略了一些*/   
//下面是把Image2的pixel值儲存起來!!-------------------------------//
AnsiString str;
int *CalBmp ;
int height=bmp2->Height;
int width =bmp2->Width ;
CalBmp=new int[height*width*3];
int X_axis,Y_axis,ZTo2D;//設定寬高與X,Y軸 並Z軸轉2D所需減去之值
int X1_axis,Y1_axis,ZTo2D1; //RG寬高
int X2_axis,Y2_axis,ZTo2D2; 
int X3_axis,Y3_axis,ZTo2D3;
Byte *ptr=NULL;
  {
    for(int r = 0; r < height; r  )
    {
       ptr = (Byte *)bmp2->ScanLine[r];
       str = " "; // 「歸零」
       for(int c = 0; c < 3*width; c  )
          {
             CalBmp[(width*3*r) c]=ptr[c*3];     //B
             CalBmp[(width*3*r) c 1]=ptr[c*3 1]; //G
             CalBmp[(width*3*r) c 2]=ptr[c*3 2];//R
             str  = AnsiString().sprintf("= ", ptr[c*3]);
             str  = AnsiString().sprintf("= ", ptr[c*3 1]);
             str  = AnsiString().sprintf("= ", ptr[c*3 2]);
//-------------------------------------------------------------------
 //下面是把抓到Image2的pixel丟到3-D中顯示出來!!!
             ZTo2D=(double)ptr[c]/(double)(sqrt(2));
             X_axis=ptr[c 1] 181-ZTo2D;
             Y_axis=255-ptr[c 2] ZTo2D;
             Image3->Canvas->Pixels[X_axis][Y_axis]
             = int RGB(ptr[c*3 2],ptr[c*3 1],ptr[c*3]);
//-------------------------------------------------------------------
 //下面是把抓到Image2的pixel丟到2-D (R-G)中!!
             ZTo2D1=(double)ptr[c]/(double)(sqrt(2));
             X1_axis=ptr[c 1] 80-ZTo2D1;     //G
             Y1_axis=255-ptr[c 2] ZTo2D1;    //R
             Image5->Canvas->Pixels[X1_axis][Y1_axis]
             =int RGB(ptr[c*3 2],ptr[c*3 1],ptr[c*3]) ;    //-------------------------------------------------------------------
 //下面是把抓到的Image2的pixel丟到2-D (R-B)中!!
             ZTo2D2=(double)ptr[c 1]/(double)(sqrt(2));
             X2_axis=ptr[c] 80-ZTo2D2; //B
             Y2_axis=255-ptr[c 2] ZTo2D2; //R
             Image6->Canvas->Pixels[X1_axis][Y1_axis]
             =int RGB(ptr[c*3 2],ptr[c*3 1],ptr[c*3]) ;
//-------------------------------------------------------------------
//下面是把抓到的Image2的pixel丟到2-D (G-B)!!
  ZTo2D3=(double)ptr[c*3 2]/(double)(sqrt(2));
  X3_axis=ptr[c*3] 80 ZTo2D3; //B
  Y3_axis=255-ptr[c*3 1]-ZTo2D3; //G
  Image7->Canvas->Pixels[X1_axis][Y1_axis]
  =int RGB(ptr  [c*3 2],ptr [c*3 1],ptr[c*3]) ;              }            RichEdit1->Lines->Add(str); // 把一列的數值丟到 RichEdit 中      }     }    }
//-------------------------------------------------------------------
void __fastcall TForm1::Image3Click(TObject *Sender)
{
//初始畫上XYZ軸
//R軸
Image3->Canvas->Pen->Color=RGB(255,0,0);
Image3->Canvas->MoveTo(181,255);
Image3->Canvas->LineTo(181,0);
//G軸
Image3->Canvas->Pen->Color=RGB(0,255,0);
Image3->Canvas->MoveTo(181,255);
Image3->Canvas->LineTo(436,255);
//B軸
Image3->Canvas->Pen->Color=RGB(0,0,255);
Image3->Canvas->MoveTo(181,255);
Image3->Canvas->LineTo(0,436);
}
//------------------------------------------------------------------
void __fastcall TForm1::Image5Click(TObject *Sender)
{
//R軸
Image5->Canvas->Pen->Color=RGB(255,0,0);
Image5->Canvas->MoveTo(80,255);  //(x,y)
Image5->Canvas->LineTo(80,0);
//G軸
Image5->Canvas->Pen->Color=RGB(0,255,0);
Image5->Canvas->MoveTo(80,255);
Image5->Canvas->LineTo(400,255);
}
//-------------------------------------------------------------------
void __fastcall TForm1::Image6Click(TObject *Sender)
{
//R軸
Image6->Canvas->Pen->Color=RGB(255,0,0);
Image6->Canvas->MoveTo(80,255);
Image6->Canvas->LineTo(80,0);
//B軸
Image6->Canvas->Pen->Color=RGB(0,0,255);
Image6->Canvas->MoveTo(80,255);
Image6->Canvas->LineTo(400,255);
}
//-------------------------------------------------------------------
void __fastcall TForm1::Image7Click(TObject *Sender)
{
//G軸
Image7->Canvas->Pen->Color=RGB(0,255,0);
Image7->Canvas->MoveTo(80,255);
Image7->Canvas->LineTo(80,0);
//B軸
Image7->Canvas->Pen->Color=RGB(0,0,255);
Image7->Canvas->MoveTo(80,255);
Image7->Canvas->LineTo(400,255);
}
 
<已修改> 感謝前輩提醒 發表人 - perking 於 2005/05/30 18:06:58 發表人 - perking 於 2005/05/30 20:43:14
------
good for you!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-30 17:26:44 IP:210.68.xxx.xxx 未訂閱
您好:    PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 >
系統時間:2024-05-03 9:16:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!