這是一個調節螢屏亮度,對比度,色相的程式,如何改成調節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
uj5u.com熱心網友回復:
我知道csdn藏龍臥虎。請大家指教。uj5u.com熱心網友回復:
調節顯示幕和調節圖片,顯示幕和圖片不相關呀。顯示關閉了,檔案還是那個檔案。更別說調顯示幕了。
圖片操作就找圖片操作的
uj5u.com熱心網友回復:
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;
}
}
uj5u.com熱心網友回復:
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;
}
}
你根據這種方式就應該差不多能轉過來了 ,獻丑了 ;只為混分
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/69961.html
標籤:API
下一篇:VB畫尺子
