Obtient la rampe de gamma sur les cartes vidéo de couleurs directes qui supportent les rampes de gamma téléchargeables dans le matériel
#include <WinAPIGdi.au3>
_WinAPI_GetDeviceGammaRamp ( $hDC, ByRef $aRamp )
| $hDC | Handle du contexte de périphérique de la carte vidéo des couleurs directes en question. |
| $aRamp | Retourne un tableau 2D ([r1, g1, b1], [r2, g2, b2],..., [r256, g256, b256]) qui est créé par cette fonction, et où la fonction place la rampe de gamma courante de la carte vidéo des couleurs. Chaque élément de ce tableau est une valeur entière dans la plage de 0 à 65535 qui est une correspondance entre les valeurs RGB dans la mémoire tampon de trame et les valeurs DAC (digital-analog-converter). (Voir MSDN pour plus d'informations) |
| Succès: | Retourne 1. |
| Échec: | Retourne 0. |
Les modes d'affichage de couleur directe n'utilisent pas les tables de correspondances de couleurs et sont généralement 16, 24 ou 32 bits.
Toutes les cartes vidéo de couleur directe ne prennent pas en charge les rampes de gamma chargeables.
La fonction _WinAPI_GetDeviceGammaRamp() réussit uniquement pour les périphériques avec des pilotes qui supportent les rampes de gamma téléchargeables dans le matériel.
Consultez GetDeviceGammaRamp dans la librairie MSDN.
#include <APIGdiConstants.au3> #include <Array.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> Local $aRamp, $iRgb = 0xFF0000 ; Crée une GUI Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 256, 256) GUICtrlCreatePic('', 0, 0, 256, 256) Local $hPic = GUICtrlGetHandle(-1) ; Obtient la rampe gamma actuelle et crée un graphique de table de correspondance (LUT) Local $hDC = _WinAPI_GetDC(0) Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, 256, 256, 0) Local $hSv1 = _WinAPI_SelectObject($hMemDC, $hBitmap) Local $hPen = _WinAPI_GetStockObject($DC_PEN) Local $hSv2 = _WinAPI_SelectObject($hMemDC, $hPen) _WinAPI_SetROP2($hMemDC, $R2_XORPEN) _WinAPI_GetDeviceGammaRamp($hDC, $aRamp) _WinAPI_ReleaseDC(0, $hDC) If IsArray($aRamp) Then For $i = 0 To 2 _WinAPI_SetDCPenColor($hMemDC, BitShift($iRgb, 8 * $i)) For $j = 0 To 255 If $j Then _WinAPI_LineTo($hMemDC, $j + 1, Round(255 * (1 - $aRamp[$j][$i] / 65280)) - 1) Else _WinAPI_MoveTo($hMemDC, 0, Round(255 * (1 - $aRamp[$j][$i] / 65280))) EndIf Next Next EndIf _WinAPI_SetDCPenColor($hMemDC, 0x404040) _WinAPI_SetROP2($hMemDC, $R2_MERGEPEN) For $i = 64 To 192 Step 64 _WinAPI_DrawLine($hMemDC, $i - 1, 0, $i - 1, 256) _WinAPI_DrawLine($hMemDC, 0, $i, 256, $i) Next _WinAPI_SelectObject($hMemDC, $hSv1) _WinAPI_SelectObject($hMemDC, $hSv2) _WinAPI_DeleteObject($hPen) _WinAPI_DeleteDC($hMemDC) ; Définit le bitmap du contrôle Picture _SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap) Local $hObj = _SendMessage($hPic, $STM_GETIMAGE) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf GUISetState(@SW_SHOW) If IsArray($aRamp) Then _ArrayDisplay($aRamp, '_WinAPI_GetDeviceGammaRamp') Else MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Error', 'Votre carte vidéeo ne supporte pas les rampes de gamma chargeable.', 0, $hForm) EndIf Do Until GUIGetMsg() = $GUI_EVENT_CLOSE