全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1327
推到 Plurk!
推到 Facebook!

想要在灰階圖上畫彩色!

尚未結案
okeyla
一般會員


發表:51
回覆:20
積分:19
註冊:2003-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-02 23:24:36 IP:211.76.xxx.xxx 未訂閱
一張640x480,8 bit的256灰階bmp, load至image元件中, 我想要讓使用者可利用滑鼠在上面作畫. 重點來了!作畫的色筆想要可以支援彩色的!(紅色、藍色、、、) 怎麼試都失敗... How to do that???
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-02 23:41:08 IP:140.135.xxx.xxx 未訂閱
okeyla您好:   
引言: 怎麼試都失敗... How to do that???
您是怎麼試的?? 方便將您的code貼上來嗎? 下面的範例供您參考
 
TColor DrawColor;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------    void __fastcall TForm1::GrayClick(TObject *Sender)
{
 Image1->Picture->LoadFromFile("0.bmp");
 Byte* ptr;
 for (int y=0;yPicture->Bitmap->Height;y  )
 {
  ptr=(Byte*)Image1->Picture->Bitmap->ScanLine[y];
  for (int x=0;xPicture->Bitmap->Width;x  )
  {
   int Gray=(ptr[x*3] ptr[x*3 1] ptr[x*3 2])/3;
   ptr[x*3]=Gray;
   ptr[x*3 1]=Gray;
   ptr[x*3 2]=Gray;
  }
 }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::PenColorClick(TObject *Sender)
{
 if (ColorDialog1->Execute())
 {
  DrawColor=ColorDialog1->Color;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 Image1->Canvas->Pixels[X][Y]=DrawColor;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 Form1->DoubleBuffered=true;
}
//---------------------------------------------------------------------------
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~ 發表人 -
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-03 14:14:19 IP:218.160.xxx.xxx 未訂閱
先把圖轉成彩色再來畫圖,試試看! Image1->Picture->Bitmap->PixelFormat = pf32bit;
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-21 11:28:25 IP:211.76.xxx.xxx 未訂閱
Okeyla 您好: 依照您描述的,可能的問題所在就是您所引進的圖檔格式了。 C Builder的Image->Picture->LoadFromFile(.);其實可以讀入不同格式的圖檔, 當然相關的引入檔也要有。但是如果不是標準的RGB形式的bmp,雖然可以讀入並顯示, 但是就無法透過Canvas來修改了! 所以一種可能的方法就是:先將它轉成標準的RGB形式的bitmap,程式碼如下: Image1->Picture->LoadFromFile("0.bmp"); // 加入下列程式碼 Graphics::TBitmap *bmp= new Graphics::TBitmap; try { bmp->Height=Image1->Picture->Height; bmp->Width =Image1->Picture->Width; bmp->Canvas->Draw(0, 0, Image1->Picture->Graphic); //先將影像複製到bmp Image1->Height=bmp->Height; Image1->Width =bmp->Width; Image1->Picture->Assign((Graphics::TBitmap*)bmp); //回存至Image1 } __finally { delete bmp; } 另外在使用ScanLine[.]之前最好先宣告該Bitmap的色彩格式,否則可能的RGB顏色改變 就不是您預期的了。 Image1->Picture->Bitmap->PixelFormat = pf24bit; 順便提供一下RGB->Gray的轉換式`: Gray = 0.299*R 0.587*G 0.114*B 而灰階就是該pixel的RGB顏色值: R = G = B = Gray 至於哪一個是R,G或B,相信很容易可以試出來的! 希望能對您的問題有幫助!
系統時間:2024-04-26 13:40:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!