Что нового

Изменение размера изображения с помощью _GDIPlus_GraphicsDrawImageRectRect()

Pat4005

Новичок
Сообщения
85
Репутация
4
Всем привет. У меня возникли трудности при изменении размера изображения с использованием _GDIPlus_GraphicsDrawImageRectRect(). Я хочу добиться того, чтобы после изменения изображения я снова получал Bitmap дескриптор, но что-то идёт не так и изменённое изображение не устанавливается. Вот функция (высота и ширина входного и выходного изображения одинаковы) :
Код:
; Установка прозрачного изображения на layered-окне
Func _SetBitmap($hGUI, $hImage, $iOpacity, $iSize = 0)
	Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
	
	;$hThumb = _GDIPlus_GetImageThumbnail($hImage, $iWidth, $iHeight)
	$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
	_GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, _GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetWidth($hImage), 0, 0, $iSize, $iSize)
	$hBitmap_Old = _GDIPlus_BitmapCreateFromGraphics($iSize, $iSize, $hGraphics)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap_Old)
	$hScrDC = _WinAPI_GetDC(0)
	$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
	$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
	$tSize = DllStructCreate($tagSIZE)
	$pSize = DllStructGetPtr($tSize)
	DllStructSetData($tSize, "X", $iSize)
	DllStructSetData($tSize, "Y", $iSize)
	$tSource = DllStructCreate($tagPOINT)
	$pSource = DllStructGetPtr($tSource)
	$tBlend = DllStructCreate($tagBLENDFUNCTION)
	$pBlend = DllStructGetPtr($tBlend)
	DllStructSetData($tBlend, "Alpha", $iOpacity)
	DllStructSetData($tBlend, "Format", 1)
	_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
	_WinAPI_ReleaseDC(0, $hScrDC)
	_WinAPI_SelectObject($hMemDC, $hOld)
	_WinAPI_DeleteObject($hBitmap)
	_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>_SetBitmap
 
Верх