位图灰度处理
比如让一指定图片框里的位图 ,点击按钮 ,该位图进行灰度处理. 问题点数:30、回复次数:6Top
1 楼lxcy(始经天月照,终若流星驰!)回复于 2005-11-18 15:47:24 得分 10
看看下面的代码(速度比较慢)
Option Explicit
Private Declare Function GetPixel Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, ByVal Y As Long) As Long
Private Declare Function SetPixelV Lib "gdi32" _
(ByVal hdc As Long, ByVal x As Long, _
ByVal Y As Long, ByVal crColor As Long) As Long
Private tmpPic As Picture
Private Sub Form_Load()
Picture1.ScaleMode = 3
Picture1.AutoRedraw = True
Set tmpPic = Picture1.Picture
End Sub
Private Sub Command1_click()
Dim width5 As Long, heigh5 As Long, rgb5 As Long
Dim hdc5 As Long, i As Long, j As Long
Dim bBlue As Long, bRed As Long, bGreen As Long
Dim Y As Long
width5 = Picture1.ScaleWidth
heigh5 = Picture1.ScaleHeight
hdc5 = Picture1.hdc
For i = 1 To width5
For j = 1 To heigh5
rgb5 = GetPixel(hdc5, i, j)
bBlue = Blue(rgb5) '获得兰色值
bRed = Red(rgb5) '获得红色值
bGreen = Green(rgb5) '获得绿色值
'将三原色转换为灰度
Y = (9798 * bRed + 19235 * bGreen + 3735 * bBlue) \ 32768
'将灰度转换为RGB
rgb5 = RGB(Y, Y, Y)
SetPixelV hdc5, i, j, rgb5
Next j
Next i
Set Picture1.Picture = Picture1.Image
End Sub
Private Function Red(ByVal mlColor As Long) As Long
'从RGB值中获得红色值
Red = mlColor And &HFF
End Function
Private Function Green(ByVal mlColor As Long) As Long
'从RGB值中获得绿色值
Green = (mlColor \ &H100) And &HFF
End Function
Private Function Blue(ByVal mlColor As Long) As Long
''从RGB值中获得蓝色值
Blue = (mlColor \ &H10000) And &HFF
End Function
Top
2 楼rainstormmaster(暴风雨 v2.0)回复于 2005-11-18 20:13:56 得分 0
http://61.186.252.131/Expert/TopicView3.asp?id=1538596Top
3 楼cuizm(射天狼 http://www.j2soft.cn/)回复于 2005-11-18 22:20:34 得分 5
我的网站上有一个VB写的图像处理程序,速度很快。
http://www.j2soft.cn/
VB资料->查询“Vb图像处理的程序”;
=================
学习技巧与源码下载站:
http://www.j2soft.cn/
http://j2soft.008.net/Top
4 楼homezj(小吉)回复于 2005-11-19 10:33:45 得分 15
我以前写的一个代码
http://dev.csdn.net/develop/article/68/68330.shtmTop
5 楼zodane(铁血小王子)回复于 2005-11-19 18:44:13 得分 0
谢谢大家的帮助 。我都看了一下, 代码都很长 ,功能也很强大。看得出大家都是真正的牛人,
不过我的水平还不到家啊 ,难以将如此复杂的代码学以致用,
我的目的其实也并不多复杂 .
就是写一个游戏程序, 模拟游戏里的死亡事件 ,当死亡事件发生时显示的窗体,
首先是图片框从资源文件里读取指定的角色人物图片 .然后在窗体load事件里对它进行处理.
自然 这个过程是越快越好 ,最好让玩家看不到人物图像从原状到灰度的过程.
再次感谢大家, 我会继续努力学习.Top
6 楼zodane(铁血小王子)回复于 2005-11-19 21:10:56 得分 0
问题搞定了, 做得很干净。
我是用的四楼的方法。 现已把它封装成模块 ,以后可以直接调用了。Top




