学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> VB >> VB编程实现图像的漂亮效果


VB编程实现图像的漂亮效果


  本文讲解了如何通过VB编程实现图像的漂亮效果。

  参数表-----------------------------------------------------

  Angle 光照倾角,取值0到90之间,以角度为单位

  WidthOfArea 光照区宽度,取值大于1的整数,以像素为单位

  Speed 光照区运动速度,取值大于1的整数

  EnhanceRatio 光照强度参数,取值大于1的整数

  -----------------------------------------------------

  好,原理就这么多,现在我们开始动手实现吧!打开VB6.0,选择新建标准EXE工程,在主窗口form1中绘制下表中所列控件并设置窗体和各控件的属性。

  控件 属性 设置

  Form1 Name Form1

  ScaleMode 3-pixel

  PictureBox Name PicDest

  ScaleMode 3-pixel

  Picture 背景图

  PictureBox Name PicSource

  ScaleMode 3-pixel

  Picture 主体图

  Label Name LblA

  Caption 角度

  Textbox Name TxtA

  Text 30

  Label Name LblW

  Caption 宽度

  Textbox Name TxtW

  Text 15

  Label Name LblE

  Caption 强度

  Textbox Name TxtE

  Text 15

  Label Name LblS

  Caption 速度

  Textbox Name TxtS

  Text 1

  CommandButton Name Cmd1

  Caption 开始特效

  生成最后的窗体。

  在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下调试通过。

技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

我都误知讲咩...
游客 发表于2008-7-20 14:36:09
我晕  简直莫名其妙 是不是你在搞笑...
游客 发表于2008-7-12 1:21:22
出先篇码错误:在End Sub、End Function或End属性后面只能出现注释。...
游客 发表于2008-6-9 14:46:27
对"VB编程实现图像的漂亮效果"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 VB编程实现图像的漂亮效果 相关内容
Google搜索中 VB编程实现图像的漂亮效果 相关内容
雅虎中 VB编程实现图像的漂亮效果 相关内容
Sogou搜索中 VB编程实现图像的漂亮效果 相关内容

相关软件 最新回复帖子:

·VB编程实现图像的漂亮效果
·五招解决WinXP启动后操作迟延的问题
·网上常用表情符号
·没有mysql支持时的替代方案
·AutoCAD三维造型实例--篮球
·AutoCAD拉伸命令快速绘制立体五角星
·AutoCAD绘制立体六棱铅笔全过程
·PS可选色与蒙板打造偏色人像艺术特效
·Photoshop四小工具巧修旧损照片
·史上最小 55MB的Win XP现在就能下载


  相关软件 VB编程实现图像的漂亮效果相关文章
Visual Basic Print方法基础学习 简单介绍Visual Basic中的Do循环结构
Visual Basic变量的基础学习 Visual Basic里与Print有关的函数
有关VB记录类型变量 VB与Oracle数据库中的日期转换
Visual Basic构建线程安全的Singleton 教你如何用Visual Basic编写病毒
讲解:自己做出VB.NET风格的右键菜单 关于Visual Basic 9.0的动态标识符
VB6中使用Winsock穿越各种代理的实现 VB中运用反射原理优化程序代码
在Visual Basic中使用WinSock控件 利用VB6.0实现五线谱作曲工具
Visual Basic应用程序的几种打印方法 用VB建立字符界面的控制台程序
通信控件MSComm使用详解 VB实现动态调用含DateTime类型存储过程
VB+Access设计图书管理系统 如何用Visual Basic编写病毒