|
楼主 |
发表于 2015-8-6 22:40
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 wangg913 于 2015-8-6 22:42 编辑
** 灰度 **
所谓灰度色,就是指纯白、纯黑以及两者中的一系列从黑到白的过渡色。我们平常所说的黑白照片、黑白电视,因此应该称为灰度照片、灰度电视比较确切。
在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度。
用于显示的灰度图像通常用每个采样像素8 bits的非线性尺度来保存,这样可以有256种灰度(8bits就是2的8次方=256)。这种精度刚刚能够避免可见的条带失真,并且非常易于编程。
对于24位真彩色来说,8位的R、G、B基色,三色值相同。
下面的代码,用来在屏幕上显示灰度条。
代码首先生成画笔,然后与屏幕句柄进行颜色管理,之后在屏幕上从左至右依次画由深至浅的灰度色线条。最终生成一个渐变的灰度带。
代码如下
- Private Type POINTAPI
- x As Long
- y As Long
- End Type
- Private Const PS_SOLID = 0
- Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
- Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
- Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
- Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
- Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
- Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
- Private Sub CommandButton1_Click()
- Dim scrPT As POINTAPI
- Dim scrHDC&, gHPen&
- Dim I%, GreyLineWid As Byte
- Dim GreyBarHei As Byte
- GreyBarHei = 150
- GreyLineWid = 2
- '获得屏幕句柄
- scrHDC = GetWindowDC(0)
- If scrHDC <> 0 Then
- For I = 0 To 255
- '创建/重置画笔
- gHPen = CreatePen(PS_SOLID, GreyLineWid, RGB(I, I, I))
- If gHPen <> 0 Then
- SelectObject scrHDC, gHPen '屏幕灰度颜色管理
- MoveToEx scrHDC, 200 + I * GreyLineWid, 400, scrPT
- LineTo scrHDC, 200 + I * GreyLineWid, 400 + GreyBarHei
- DeleteObject gHPen
- End If
- Next
-
- '在灰度条外面画黑色框
- gHPen = CreatePen(PS_SOLID, GreyLineWid + 1, vbBlack)
- SelectObject scrHDC, gHPen
- MoveToEx scrHDC, 200 - 1, 400 - 4, scrPT
- LineTo scrHDC, 200 + I * GreyLineWid + 4, 400 - 4
- LineTo scrHDC, 200 + I * GreyLineWid + 4, 400 + GreyBarHei + 4
- LineTo scrHDC, 200 - 1, 400 + GreyBarHei + 4
-
- '删除自定义画笔
- DeleteObject gHPen
- End If
- End Sub
复制代码
20150804-屏幕显示灰度条-2.rar
(19.51 KB, 下载次数: 83)
|
|