Re: [VB6 ] 關於取得點的灰度(像素)值
看板Visual_Basic作者geniusgod (華麗的貪婪 人最美麗本性)時間18年前 (2006/12/25 23:33)推噓0(0推 0噓 0→)留言0則, 0人參與討論串3/3 (看更多)
※ 引述《dhon (小東)》之銘言:
: : C(I, J) = GetPixel(hdc1, I, J)
: 我直接挑這行重點來說就好了
: GetPixs = GetPixel(PicIN.hDC, PixWidth, PixHeight)
: '讀取圖片中某點暫存至變數中
: beRed = (GetPixs And &HFF) '轉化成灰階的 R 值
: beGreen = (GetPixs \ &H100) And &HFF '轉化成灰階的 G 值
: beBlue = (GetPixs \ &H10000) And &HFF '轉化成灰階的 B 值
: y = CInt(0.299 * beRed + 0.588 * beGreen + 0.114 * beBlue)
: '得出真正的灰階值(Y)
: 而至於你說為什麼會有 16777215 呢
: 那是因為 256*256*256 - 1
: 也就是它的 rgb 應該都是 FF,FF,FF
: 無論你的來源是灰階,256色,24bit,不管多少
: 基本上以目前大部份的人的顯示器顏色都有24bit或32bit
: 所以出來的值最大就會是 0~16777215 (r*g*b)
: 懂了嗎???
: 但與甚如此,從畫面得出色值效率不見得最快,最好
: 最快的,反而是直接分析來源圖檔的 binary code
: 而且可以避免因為來源色階與顯示免階的不同
: 而產生了運算的誤差
感謝回文 我大概知道為什麼會出現那種怪現象了XD
請看下面回文
我後來發現我在輸出的text3那邊應該是設錯了
不能輸出C(I,J)陣列應該輸出灰度值(我原文改了一下~)
不過這還不是最大問題
我在迴圈for裡面放的轉灰階函數
R = Redval(c(I, J))
G = Greenval(c(I, J))
B = Blueval(c(I, J))
Gray = (R + G + B) / 3
R = Gray
G = R: B = R
依照我的想法是應該讀完整張圖然後去我要的點
但是把這段函數改成放在迴圈外後
意思變成我只要取那點就好不用讀取整張圖?
這樣我是不知道程式有沒有比較快
不過當我修改這兩個問題和步驟後
輸出的灰度值就會介於0~255之間
我用黑白圖片驗證了一下大致上應該是對的o(>///<)o
只能說我debug能力實在有待加強XD
目前看起來程式應該是沒有問題~
如果各位覺得我程式還可能會有什麼問題請不吝賜教
感恩~
--
江波嘯 烽煙招
興來病酒罷琴簫
世情笑 人寂寥
壯懷誰留向晚照
~~ 笑夢紅塵 ~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.126.128.161
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Visual_Basic 近期熱門文章
PTT數位生活區 即時熱門文章