Re: [VB6 ] 關於取得點的灰度(像素)值

看板Visual_Basic作者 (華麗的貪婪 人最美麗本性)時間18年前 (2006/12/25 23:33), 編輯推噓0(000)
留言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
文章代碼(AID): #15Z-zFC6 (Visual_Basic)
文章代碼(AID): #15Z-zFC6 (Visual_Basic)