作者geniusgod (华丽的贪婪 人最美丽本性)
看板Visual_Basic
标题Re: [VB6 ] 关於取得点的灰度(像素)值
时间Mon Dec 25 23:46:01 2006
※ 引述《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