_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, чтобы освободить ресурсы объектаСм. также
Пример
#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