- Сообщения
- 5,379
- Репутация
- 2,724
Меня мучает один вопрос? Есть такая API функция GetDeviceGammaRamp(), которая позволяет получить текущую гамму... Фактически, мы получаем 3 массива из 256 значений (тип WORD) каждый для цветов R, G и B соответственно. Вот реализация этой функции:
А вопрос заключается в том, почему максимальное значения равно 65280 вместо 65535 (тип WORD)? А у вас?
Windows 7 x86, NVIDIA GeForce GTX 280
Код:
#Include <Array.au3>
#Include <WinAPIEx.au3>
Dim $Data[256][3]
$hForm = GUICreate('Lookup Table', 256, 256)
$Pic = GUICtrlCreatePic('', 0, 0, 256, 256)
$hDC = _WinAPI_GetDC(0)
$tRamp = DllStructCreate('ushort[768]')
$Ret = DllCall('gdi32.dll', 'int', 'GetDeviceGammaRamp', 'hwnd', $hDC, 'ptr', DllStructGetPtr($tRamp))
$hMemDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, 256, 256, 0)
$hSv1 = _WinAPI_SelectObject($hMemDC, $hBitmap)
$hPen = _WinAPI_GetStockObject($DC_PEN)
$hSv2 = _WinAPI_SelectObject($hMemDC, $hPen)
_WinAPI_SetROP2($hMemDC, $R2_XORPEN)
_WinAPI_ReleaseDC(0, $hDC)
$Rgb = 0xFF0000
$Count = 1
For $i = 0 To 2
_WinAPI_SetDCPenColor($hMemDC, BitShift($Rgb, 8 * $i))
For $j = 0 To 255
; $Data[$j][$i] = DllStructGetData($tRamp, 1, $Count) - $j / 255 * 65280 ; Max = 65280 ???
$Data[$j][$i] = DllStructGetData($tRamp, 1, $Count)
If $j Then
_WinAPI_LineTo($hMemDC, $j + 1, Round(255 * (1 - DllStructGetData($tRamp, 1, $Count) / 65280)) - 1)
Else
_WinAPI_MoveTo($hMemDC, 0, Round(255 * (1 - DllStructGetData($tRamp, 1, $Count) / 65280)))
EndIf
$Count += 1
Next
Next
_WinAPI_SelectObject($hMemDC, $hSv1)
_WinAPI_SelectObject($hMemDC, $hSv2)
_WinAPI_DeleteObject($hPen)
_WinAPI_DeleteDC($hMemDC)
GUICtrlSendMsg($Pic, 0x0172, 0, $hBitmap)
GUISetState()
_ArrayDisplay($Data)
Do
Until GUIGetMsg() = -3
А вопрос заключается в том, почему максимальное значения равно 65280 вместо 65535 (тип WORD)? А у вас?
Windows 7 x86, NVIDIA GeForce GTX 280