Функция _GDIPlus_BitmapCreateFromGdiDib

         Описание функции


_GDIPlus_BitmapCreateFromGdiDib

Создаёт объект Bitmap на основе структуры $tagBITMAPINFO и массив данных пикселей

#Include <GDIP.au3>
#include <WinAPI_for_GDIP.au3>
_GDIPlus_BitmapCreateFromGdiDib($tBitmapInfo, $pBitmapData)

Параметры

$tBitmapInfo Структура $tagBITMAPINFO. Эта структура определяет несколько атрибутов Bitmap, такие как размер и формат пикселей
$pBitmapData Указатель на массив байтов, содержащий данные пикселей

Возвращаемое значение

Успех:Возвращает дескриптор нового объекта Bitmap
Ошибка:Возвращает 0, либо:
Если ошибка DllCall(), устанавливает @error и @extended возвращённые вызовом DllCall()
$GDIP_STATUS содержит не нулевое значение кода ошибки

Примечания

После завершения использования объекта вызовите _GDIPlus_ImageDispose, чтобы освободить ресурсы объекта

См. также

Пример

; Authenticity
; http://www.autoitscript.com/forum/index.php?showtopic=106021
#include <FontConstants.au3>
#include <GDIP.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI_for_GDIP.au3>

Global Const $DTT_TEXTCOLOR = 0x00000001
Global Const $DTT_GLOWSIZE = 0x00000800
Global Const $DTT_COMPOSITED = 0x00002000

; Структура $tagDTTOPTS - указывает различные опции используемые в _WinAPI_DrawThemeTextEx
Global Const $tagDTTOPTS = _
        "uint Size;uint Flags;uint clrText;uint clrBorder;uint clrShadow;int TextShadowType;" & $tagPOINT & _
        ";int BorderSize;int FontPropId;int ColorPropId;int StateId;int ApplyOverlay;int GlowSize;ptr DrawTextCallback;int lParam;"

_Example()

Func _Example()
    Local $hGUI, $hGraphics, $hDC, $hCDC, $hTheme
    Local $hBitmap, $hDIBBmp, $hOldBmp, $hFont, $hOldFont
    Local $pBitmapData, $tBmpInfo, $tDTTOptions, $pDTTOptions, $tClientRect, $pClientRect

    ; Инициализирует библиотеку GDI+
    _GDIPlus_Startup()

    ; Создаёт GUI (нажмите ESC для выхода)
    $hGUI = GUICreate("", @DesktopWidth, @DesktopHeight)
    GUISetState()

    ; Открывает данные темы и связанный с ним класс.
    $hTheme = _WinAPI_OpenThemeData($hGUI, "globals")

    ; Создаёт графический объект из дескриптора окна
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hDC = _GDIPlus_GraphicsGetDC($hGraphics)
    $hCDC = _WinAPI_CreateCompatibleDC($hDC)
    $tClientRect = _WinAPI_GetClientRect($hGUI)
    $pClientRect = DllStructGetPtr($tClientRect)

    $tBmpInfo = DllStructCreate($tagBITMAPINFO)
    DllStructSetData($tBmpInfo, "Size", DllStructGetSize($tBmpInfo) - 4)
    DllStructSetData($tBmpInfo, "Width", @DesktopWidth)
    DllStructSetData($tBmpInfo, "Height", -@DesktopHeight)
    DllStructSetData($tBmpInfo, "Planes", 1)
    DllStructSetData($tBmpInfo, "BitCount", 32)
    DllStructSetData($tBmpInfo, "Compression", 0) ; BI_RGB

    ; Создаёт DIB объект and select assign to the memory device context
    $hDIBBmp = _WinAPI_CreateDIBSection($hDC, $tBmpInfo, $pBitmapData)
    $hFont = _WinAPI_CreateFont(50, 30, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Courier New')

    $hOldBmp = _WinAPI_SelectObject($hCDC, $hDIBBmp) ; Выбирает объект DIBBMP после рисования текста
    $hOldFont = _WinAPI_SelectObject($hCDC, $hFont) ; Выбирает объект шрифта

    $tDTTOptions = DllStructCreate($tagDTTOPTS)
    DllStructSetData($tDTTOptions, "Size", DllStructGetSize($tDTTOptions))
    DllStructSetData($tDTTOptions, "Flags", BitOR($DTT_GLOWSIZE, $DTT_TEXTCOLOR, $DTT_COMPOSITED)) ; поля GlowSize и ClrText валидны
    DllStructSetData($tDTTOptions, "GlowSize", 25)
    DllStructSetData($tDTTOptions, "clrText", _RGBtoBGR($GDIP_CHOCOLATE))
    $pDTTOptions = DllStructGetPtr($tDTTOptions)

    _WinAPI_DrawThemeTextEx($hTheme, $hCDC, 0, 0, "AutoIt GDI+", BitOR($DT_SINGLELINE, $DT_CENTER, $DT_VCENTER, $DT_NOPREFIX), $pClientRect, $pDTTOptions)

    ; Освобождает графический dc для рисования
    _WinAPI_SelectObject($hCDC, $hOldFont)
    _WinAPI_SelectObject($hCDC, $hOldBmp)
    _WinAPI_DeleteObject($hFont)
    _WinAPI_DeleteDC($hCDC)
    _GDIPlus_GraphicsReleaseDC($hGraphics, $hDC)

    $hBitmap = _GDIPlus_BitmapCreateFromGdiDib($tBmpInfo, $pBitmapData)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    ; Освобождает ресурсы
    _GDIPlus_ImageDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _WinAPI_DeleteObject($hDIBBmp)

    _WinAPI_CloseThemeData($hTheme)

    ; Закрывает библиотеку GDI+
    _GDIPlus_Shutdown()
EndFunc   ;==>_Example

Func _RGBtoBGR($iRGB)
    Return Dec(StringMid(Binary($iRGB), 3, 6))
EndFunc   ;==>_RGBtoBGR