首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> VB >> 正文
用VB编程实现图像的熠熠生辉效果
来源:ChinaItLab 作者:佚名 时间:2007-5-30

  生成最后的窗体。

  在form1的代码编辑窗口中添加如下代码

Option Explicit

Const pi = 3.1415926
 
'api函数声明------------------------------------------------------------
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long) '拷贝内存

Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long) As Long '取像素值

Private Declare Function SetPixel Lib "gdi32" (ByVal hdc As Long, _
ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long '设置像素值

Private Sub cmd1_Click()
cmd1.Enabled = False
MakeSpark txtA, txtW, txtS, 0, txtE, 65, 10
cmd1.Enabled = True
End Sub

Private Sub MakeSpark(Angle As Long, WidthOfArea As Long, _
Speed As Long, MaskColor As Long, _
EnhanceRatio As Single, OffsetX As Long, OffsetY As Long)
'熠熠生辉效果
'参数表-----------------------------------------------------
'Angle         光照倾角
'WidthOfArea   光照区宽度
'Speed         光照区运动速度
'MaskColor     主体图的屏蔽色
'EnhanceRatio  光照强度参数
'OffsetX       主体图叠加到目标图时的 X 偏移
'OffsetY       主体图叠加到目标图时的 Y 偏移

Dim i&, X&, Y&, L&, Color&, EnhanceValue&
Dim R As Byte, G As Byte, B As Byte

With picSource

    For i = 0 To .Width + .Height * Tan(Angle * pi / 180) + WidthOfArea _
    Step Speed
    '扫描主体图
        For X = 0 To .Width - 1
            For Y = 0 To .Height - 1
                Color = GetPixel(.hdc, X, Y)
                '遍历主体图的像素
               
                If Color = MaskColor Then
                    'skip跳过
                Else
                    L = Abs(X - (i - Y * Tan(Angle * pi / 180)))
                    '计算当前像素于扫描线的 X 方向距离
                   
                    If L <= WidthOfArea Then '如果当前像素在光照范围内
                       
                        R = ExtractR(Color) '取 R,G,B 值
                        G = ExtractG(Color)
                        B = ExtractB(Color)
                       
                        EnhanceValue = EnhanceRatio * (WidthOfArea - L)
                        '算出要增强的亮度值
                       
                        '加强亮度,但不能超过最大值 255
                        R = IIf(R + EnhanceValue > 255, 255, R + EnhanceValue)
                        G = IIf(G + EnhanceValue > 255, 255, G + EnhanceValue)
                        B = IIf(B + EnhanceValue > 255, 255, B + EnhanceValue)
                       
                        Color = RGB(R, G, B) '算出加强亮度后的颜色值
                    End If
                    SetPixel picDest.hdc, X + OffsetX, Y + OffsetY, Color
                    '拷贝像素到目标图
                End If
            Next Y
        Next X
       
        picDest.Refresh '一帧已处理完,显示
        DoEvents
    Next i
 End With

End Sub

Private Function ExtractR(Col As Long) As Byte

'提取一个颜色值的红色分量值,红色分量位于这个颜色值的最低字节
Dim tmp As Byte
CopyMemory tmp, ByVal VarPtr(Col), 1
ExtractR = tmp
End Function
Private Function ExtractG(Col As Long) As Byte
'提取一个颜色值的绿色分量值,绿色分量的位置比红色分量高一字节
Dim tmp As Byte
CopyMemory tmp, ByVal VarPtr(Col) + 1, 1
ExtractG = tmp
End Function
Private Function ExtractB(Col As Long) As Byte
'提取一个颜色值的蓝色分量值,蓝色分量的位置比绿色分量高一字节
Dim tmp As Byte
CopyMemory tmp, ByVal VarPtr(Col) + 2, 1
ExtractB = tmp
End Function

  本程序在Win2000+VB6.0下调试通过。

上一页  [1] [2] 

【责编:Youping】
中国IT教育热线咨询
相关文章
基于HOOK和MMF的Win密码渗透技术
Java中消除实现继承和面向接口编程
编程软件系列之C++编程技巧
VB.NET中的多窗体编程:升级到 .NET…
解析VB的事件驱动编程
实现Java平台的三种方式
Delphi中用API实现在MSN的信息提示
利用C#实现标注式消息提示窗口
编写快速高效的VB程序
如何用Delphi实现子目录级的文件查询
推荐文章

 精彩友情推荐
·Asp源码 PHP源码
·CGI源码 JSP源码
·建站书籍教程
·服务器软件 .net源码
·建站工具软件
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·框架:J2EE WEB应用架构分析…03-13
·几种VC++数据库开发技术的相对比…03-13
·利用C#实现标注式消息提示窗口03-13
·用C#创建COM对象03-13
·Visual C#多线程参数传递浅析…03-13
·Visual C#多线程参数传递浅析…03-13
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视…07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05