1,486
社区成员
发帖
与我相关
我的任务
分享
'Download by http://www.codefans.net
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long
Private Declare Function SetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long
Private RGBRamp1(255, 2) As Integer
Private RGBRamp2(255, 2) As Integer
Dim ScrDC As Long
Private Sub Command1_Click()
Dim Fn As Integer
Slider1.Value = 0
Slider2.Value = 100
Slider3(0).Value = 0
Slider3(1).Value = 0
Slider3(2).Value = 0
If Dir(App.Path & "\Default.dat") <> "" Then
Fn = FreeFile
Open App.Path & "\Default.dat" For Input As #Fn
For i = 0 To 255
For j = 0 To 2
Input #Fn, RGBRamp1(i, j)
Next j
Next i
Close #Fn
Else
MsgBox "未找到默认数据文件,只能恢复到本次调置前的状态!", vbOKOnly + vbExclamation, "系统提示"
End If
SetDeviceGammaRamp ScrDC, RGBRamp1(0, 0)
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
ScrDC = GetDC(GetDesktopWindow) ' 参数为0获取整个屏幕句柄
GetDeviceGammaRamp ScrDC, RGBRamp1(0, 0) '保存当前Gamma梯度值值至数组入口点
Slider1.Min = -50
Slider1.Max = 50
Slider1.Value = 0
Slider2.Min = 1
Slider2.Max = 100
Slider2.Value = 100
For i = 0 To 2
Slider3(i).Min = -50
Slider3(i).Max = 50
Slider3(i).Value = 0
Next i
Label2.Caption = Slider1.Value
Label3.Caption = Slider2.Value
End Sub
Private Sub Slider1_Change()
Label2.Caption = Slider1.Value
Call SetLightness(Slider1.Value)
End Sub
Private Sub Slider2_Change() '调整对比度
Dim i As Integer, j As Integer
Label3.Caption = Slider2.Value
For i = 0 To 255
For j = 0 To 2
RGBRamp2(i, j) = RGBRamp1(i, j) * Slider2.Value / 100
Next j
Next i
SetDeviceGammaRamp ScrDC, RGBRamp2(0, 0)
End Sub
Private Sub Slider3_Change(Index As Integer)
Call SetRGBColor(Slider3(0).Value, 0) '三次调用是为了实现混色
Call SetRGBColor(Slider3(1).Value, 1)
Call SetRGBColor(Slider3(2).Value, 2)
SetDeviceGammaRamp ScrDC, RGBRamp2(0, 0)
End Sub
Private Sub SetLightness(ByVal intRGB As Integer) '调整亮度
Dim i As Integer, j As Integer
For i = 0 To 255
For j = 0 To 2
Select Case intRGB
Case Is < 0
RGBRamp2(i, j) = LngToInt(IntToLng(RGBRamp1(i, 0)) * (100 - Abs(intRGB)) / 100)
Case Is = 0
RGBRamp2(i, j) = RGBRamp1(i, 0)
Case Is > 0
RGBRamp2(i, j) = LngToInt(65535 - ((65535 - IntToLng(RGBRamp1(i, 0))) * (100 - intRGB) / 100))
End Select
Next j
Next i
SetDeviceGammaRamp ScrDC, RGBRamp2(0, 0)
End Sub
Private Sub SetRGBColor(ByVal intRGB As Integer, IdxRGB As Integer) '调整色相
Dim i As Integer, r As Integer
For i = 0 To 255
Select Case intRGB
Case Is < 0
r = LngToInt(IntToLng(RGBRamp1(i, IdxRGB)) * (100 - Abs(intRGB)) / 100)
Case Is = 0
r = RGBRamp1(i, IdxRGB)
Case Is > 0
r = LngToInt(65535 - ((65535 - IntToLng(RGBRamp1(i, IdxRGB))) * (100 - intRGB) / 100))
End Select
If IdxRGB = 0 Then
RGBRamp2(i, 0) = r
ElseIf IdxRGB = 1 Then
RGBRamp2(i, 1) = r
ElseIf IdxRGB = 2 Then
RGBRamp2(i, 2) = r
End If
Next i
End Sub
Private Function LngToInt(lngValue As Long) As Integer '转换为符号整型数据
If lngValue <= 32767 Then LngToInt = CInt(lngValue) Else LngToInt = CInt(lngValue - 65535)
End Function
Private Function IntToLng(intValue As Integer) As Long '转换为无符号长整型数据
If intValue >= 0 Then IntToLng = intValue Else IntToLng = intValue + 65535
End Function