VB6把彩色图片变成灰阶的方法计算机等级考试

文章作者 100test 发表时间 2010:01:01 10:52:46
来源 100Test.Com百考试题网


  第一读取文件加载 picturebox里 地球人都会这里就不说了
  ’下面建立一个模块
  view plaincopy to clipboardprint?
  ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  Option Explicit
  ’算法二要的API
  Private Declare Function SetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
  Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long
  Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long
  Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)
  Private Type BITMAP
  bmType As Long
  bmWidth As Long
  bmHeight As Long
  bmWidthBytes As Long
  bmPlanes As Integer
  bmBitsPixel As Integer
  bmBits As Long
  End Type
  ’算法一要的API
  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
  ’算法二 提高速度约2秒 是方法1的46倍速度
  Public Function TurnBmp(hSrcBmp As Long, Optional hDestBmp As Long = 0) As Boolean
  Dim x As Long, Y As Long
  Dim BytesPixel As Long
  If hDestBmp = 0 Then hDestBmp = hSrcBmp
  Dim tSBmpInfo As BITMAP, tDBmpInfo As BITMAP
  Dim sBits() As Byte, dBits() As Byte
  ’获得位图信息
  Call GetObject(hSrcBmp, Len(tSBmpInfo), tSBmpInfo)
  Call GetObject(hDestBmp, Len(tDBmpInfo), tDBmpInfo)
  ’申请空间
  ReDim sBits(1 To tSBmpInfo.bmWidthBytes, 1 To tSBmpInfo.bmHeight)
  ReDim dBits(1 To tDBmpInfo.bmWidthBytes, 1 To tDBmpInfo.bmHeight)
  ’获得源图与目标图二进制位
  Call GetBitmapBits(hSrcBmp, tSBmpInfo.bmWidthBytes * tSBmpInfo.bmHeight, sBits(1, 1))
  Call GetBitmapBits(hDestBmp, tDBmpInfo.bmWidthBytes * tDBmpInfo.bmHeight, dBits(1, 1))
  ’计算颜色值占用多少字节
  BytesPixel = tSBmpInfo.bmBitsPixel / 8
  Dim l As Integer
  Dim b As Long

相关文章


计算机等级考试二级VB模拟试题一及答案解析计算机等级考试
关于VisualBasic9.0的XML字面量和XML后期绑定计算机等级考试
在VB中显示常用的符号(如欧元、人民币、正负号、度等)计算机等级考试
通过VB调用C#的DLL的方法计算机等级考试
VB6把彩色图片变成灰阶的方法计算机等级考试
VB中的控件结构概述计算机等级考试
VB的灵魂之对象使用(二)计算机等级考试
VB的灵魂之对象使用(一)计算机等级考试
VB中的用户界面设计计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛