UDF > WinAPIEx > GDI > Colors >


_WinAPI_GetDeviceGammaRamp

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 )

Paramètres

$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)

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0.

Remarque

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.

Voir aussi

Consultez GetDeviceGammaRamp dans la librairie MSDN.

Exemple

#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