这是一个调节屏幕亮度,对比度,色相的程序,如何改成调节picture的呢?

cxy5636917 2014-03-27 03:54:26
这是一个调节屏幕亮度,对比度,色相的程序,如何改成调节picture的呢?

我想调节picture内图片的色相。

'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

...全文
2737 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lml_liang 2016-09-06
  • 打赏
  • 举报
回复
Private SetRGBColor(int intRGB, int IdxRGB ) //调整色相 {int r; for(int i = 0;i<256;i++) { if(intRGB = 0) r = RGBRamp1(i, IdxRGB); else if (intRGB < 0) r = LngToInt(IntToLng(RGBRamp1(i, IdxRGB)) * (100 - Abs(intRGB)) / 100); else if (intRGB > 0) r = LngToInt(65535 - ((65535 - IntToLng(RGBRamp1(i, IdxRGB))) * (100 - intRGB) / 100)); if( IdxRGB = 0 ) RGBRamp2(i, 0) = r; else if (IdxRGB = 1) RGBRamp2(i, 1) = r; else if (IdxRGB = 2) RGBRamp2(i, 2) = r; } } 你根据这种方式就应该差不多能转过来了 ,献丑了 ;只为混分
lml_liang 2016-09-06
  • 打赏
  • 举报
回复
Private SetRGBColor(int intRGB, int IdxRGB) //调整色相 { int r; for (int i = 0; i < 256; i++) { switch (intRGB) { case < 0: r = LngToInt(IntToLng(RGBRamp1(i, IdxRGB)) * (100 - Abs(intRGB)) / 100); break; case 0: r = RGBRamp1(i, IdxRGB); break; case > 0: r = LngToInt(65535 - ((65535 - IntToLng(RGBRamp1(i, IdxRGB))) * (100 - intRGB) / 100)); break; } if (IdxRGB = 0) RGBRamp2(i, 0) = r; else if (IdxRGB = 1) RGBRamp2(i, 1) = r; else if (IdxRGB = 2) RGBRamp2(i, 2) = r; } }
王二.麻子 2014-04-04
  • 打赏
  • 举报
回复
调节显示器和调节图片,显示器和图片不相关呀。 显示关闭了,文件还是那个文件。更别说调显示器了。 图片操作就找图片操作的
cxy5636917 2014-03-27
  • 打赏
  • 举报
回复
我知道csdn藏龙卧虎。请大家指教。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧