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

如何將Image上的圖 抓出每一點的RGB值

答題得分者是:tomoi
鴻760121
一般會員


發表:8
回覆:10
積分:3
註冊:2008-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-08 14:10:24 IP:125.231.xxx.xxx 訂閱
請問如何將Image上的圖 抓出每一點的RGB值 顯示出來 不是用滑鼠那種喔

用滑鼠那種我大概知道 也爬過很多文了 就是不知道怎麼下手

抓出RGB前的圖 要做什麼處理嗎??
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-08 17:17:57 IP:59.120.xxx.xxx 訂閱
應該是一樣的作法吧 =___=

差別只在於一個是自己指定要讀取的像素
另一個是透過滑鼠的move事件來得到的某一個像素

前提是如果你真的看的懂用滑鼠事件寫的方法

===================引 用 鴻760121 文 章===================
請問如何將Image上的圖 抓出每一點的RGB值 顯示出來 不是用滑鼠那種喔

用滑鼠那種我大概知道 也爬過很多文了 就是不知道怎麼下手

抓出RGB前的圖 要做什麼處理嗎??
------
Tomo
鴻760121
一般會員


發表:8
回覆:10
積分:3
註冊:2008-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-09 12:34:31 IP:125.231.xxx.xxx 訂閱
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
TColor a = Image1->Canvas->Pixels[X][Y];
Label1->Caption = X;
Label2->Caption = Y;
unsigned char b;
b = char(a);
Label3->Caption = int(b);
a >>= 8;
b = char(a);
Label4->Caption = int(b);
a >>= 8;
b = char(a);
Label5->Caption = int(b);
}

上面這是滑鼠偵測座標和RGB值
要怎麼變成 抓全部點的 顯示RGB值在Memo1上面??


下面這好像是 把每點的RGB值 顯示在Memo1上面
可是我看不太懂 也不會用
//由(x1,y1)和(x2,y2)就可以組成矩形範圍--------------------
ss1="";
for(int i=x1; i<=x2; i )
{
for(int j=y1; j<=y2; j )
{
aaa = int(Image1->Canvas->Pixels[i][j]);
rr = char(aaa); //讀取Red值

s1=IntToStr(rr); //將數值存入字串
ss1=ss1 s1 " ,";
};
};

Memo1->Lines->Add(ss1 "," s "矩陣" tt);
ss1="";
//---------------------------------------------------------


麻煩高手賜教

tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-11 17:48:14 IP:59.120.xxx.xxx 訂閱
我不是高手,這種問題還不需要高手: )

[code cpp]
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
TColor a = Image1->Canvas->Pixels[X][Y];
Label1->Caption = X;
Label2->Caption = Y;
unsigned char b;
b = char(a);
Label3->Caption = int(b);

b = char(a>>8);
Label4->Caption = int(b);


b = char(a>>16);
Label5->Caption = int(b);
}
[/code]


原本的程式我不能compiler 你有試過嗎?
所以我小改了一下

原本的滑鼠事件MouseMove裡的重點就是取得滑鼠座標X,Y


現在你想要自己秀出圖上所有的色彩資訊,寫個for 迴圈來取代原本的X,Y
like this:


[code cpp]


int X,Y;
unsigned char b,c,d;

for(Y=0; YHeight; Y )
for(X=0; XWidth; X )
{
TColor a = Image1->Canvas->Pixels[X][Y];
// Label1->Caption = X;
// Label2->Caption = Y;

b = char(a);
c = char(a>>8);
d = char(a>>16);
Memo1->Lines->Add(String(X) "," String(Y) String(b) String(c) String(d));


}

[/code]

寫到Memo1的格式自己再排列一下吧 這樣直接寫出來應該很難看的懂XD
自己動一下腦吧
------
Tomo
編輯記錄
tomoi 重新編輯於 2008-08-12 07:53:32, 註解 無‧
鴻760121
一般會員


發表:8
回覆:10
積分:3
註冊:2008-06-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-08-13 11:14:29 IP:125.231.xxx.xxx 訂閱

謝謝 我大概弄出來了
只是Memo1 排列 和 自動大小 橋不好
怎麼寫 Memo1 上的數值 排列 會和開啟的圖片一樣

目前我開Button跑是xxx.xxx.xxx(我把座標拿掉) 一直 直列往下延伸 大概是 圖片上一行一行的掃描


PS:原本的滑鼠掃描座標和RGB 可以跑沒問題
編輯記錄
鴻760121 重新編輯於 2008-08-13 11:16:12, 註解 無‧
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-08-13 16:36:57 IP:59.120.xxx.xxx 訂閱
  不要每讀一個pixel就寫到Memo那
先寫到一個string
等讀完一排再寫到Memo

===================引 用 鴻760121 文 章===================

謝謝 我大概弄出來了
只是Memo1 排列 和 自動大小 橋不好
怎麼寫 Memo1 上的數值 排列 會和開啟的圖片一樣

目前我開Button跑是xxx.xxx.xxx(我把座標拿掉) 一直 直列往下延伸 大概是 圖片上一行一行的掃描


PS:原本的滑鼠掃描座標和RGB 可以跑沒問題
------
Tomo
鴻760121
一般會員


發表:8
回覆:10
積分:3
註冊:2008-06-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-08-13 19:37:20 IP:125.231.xxx.xxx 訂閱
能不能 不用把圖顯示出來 而抓出RGB值顯示在Memo

因為現在是開一張圖在Image上面 能不能不顯示在Image上面
直接開啟檔案 選圖片 然後出RGB值顯示在Memo
tomoi
初階會員


發表:2
回覆:30
積分:41
註冊:2008-07-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-08-13 20:00:24 IP:220.139.xxx.xxx 訂閱
當然可以
但是請你先自己努力一下吧: )
===================引 用 鴻760121 文 章===================
能不能 不用把圖顯示出來 而抓出RGB值顯示在Memo

因為現在是開一張圖在Image上面 能不能不顯示在Image上面
直接開啟檔案 選圖片 然後出RGB值顯示在Memo
------
Tomo
系統時間:2024-05-01 13:28:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!