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

如何改變 TImage 讓他偏向某色彩

尚未結案
cuteysc
初階會員


發表:16
回覆:37
積分:35
註冊:2003-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-16 10:50:15 IP:211.76.xxx.xxx 未訂閱
不好意思, 爬文都找不到相關文章    小弟有個問題, 也是我一直想不透的問題 如何將某個 TImage 圖形讓他像遊戲圖檔改變調色盤的方式偏向某色彩 ?    好比在遊戲中滑鼠指向某人物時, 該人物偏向紅色顯示 小弟試了一下單獨抓取 RGB 並改變 R 值的做法, 不過並沒有讓圖檔偏紅顯示 以下是我的 Code
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    for(int Loop=0;LoopWidth;Loop  )
    {
        for(int Loop2=0;Loop2Width;Loop2  )
        {
            int RGB=ColorToRGB(Image1->Canvas->Pixels[Loop][Loop2]);
            int R=GetRValue(RGB);
            int G=GetGValue(RGB);
            int B=GetBValue(RGB);
            R =10;
            Image1->Canvas->Pixels[Loop][Loop2]=(TColor)RGB(R,G,B);
        }
    }
}
不知道是哪裡做錯了
richtop
資深會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-16 12:08:45 IP:211.76.xxx.xxx 未訂閱
cuteysc 您好:    其實您程式碼已經可以完成您要的工作,不過或許是Image1->Canvas與Image1中Bitmap對應的關係,所以並沒有立即更新內容,所以感覺上像是沒有變一樣。 試著將程式最小化或者是能讓程式重繪的任何方式強迫程式更新,就能看到改變。讓改變的值大些會比較明顯。 利用程式碼也能達到這個目的。另外,使用ScanLine可以加快處理速度,提供參考。 <>< face="Verdana, Arial, Helvetica">引言: 不好意思, 爬文都找不到相關文章 小弟有個問題, 也是我一直想不透的問題 如何將某個 TImage 圖形讓他像遊戲圖檔改變調色盤的方式偏向某色彩 ? 好比在遊戲中滑鼠指向某人物時, 該人物偏向紅色顯示 小弟試了一下單獨抓取 RGB 並改變 R 值的做法, 不過並沒有讓圖檔偏紅顯示 以下是我的 Code
 
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
    for(int Loop=0;LoopWidth;Loop  )
    {
        for(int Loop2=0;Loop2Width;Loop2  )
        {
            int RGB=ColorToRGB(Image1->Canvas->Pixels[Loop][Loop2]);
            int R=GetRValue(RGB);
            int G=GetGValue(RGB);
            int B=GetBValue(RGB);
            R =10;
            if ( R>255 ) R=255;
            Image1->Canvas->Pixels[Loop][Loop2]=(TColor)RGB(R,G,B);
        }
    }
  Image1->Refresh();
}
不知道是哪裡做錯了
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{ const int RED=2;
  Byte *ptr;
  int index, value;      for (int row=0; rowPicture->Height; row  )
     { ptr = (Byte*) Image1->Picture->Bitmap->ScanLine[row];
       index = 0;           for (int col=0; colPicture->Width; col  )
          { value = 20   ptr[index RED];                if ( value>255 )
              ptr[index RED]=255;
            else if ( value<0 )
              ptr[index RED]=0;
            else ptr[index RED]=value;                index  = 3;
          }
     }
  Image1->Refresh();
}
//---------------------------------------------------------------------------
RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
cuteysc
初階會員


發表:16
回覆:37
積分:35
註冊:2003-05-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-17 13:07:02 IP:211.76.xxx.xxx 未訂閱
richtop 兄 : 由衷感謝, 問題已經解決, 而且速度快很多, 謝謝你 ^^
系統時間:2024-05-04 17:05:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!