PAEz 1 Posted September 2, 2011 (edited) I needed this routine for some stuff Im doing and couldnt find an example on the forums so just wrote a function using what Ive seen others do and it works great but Im not sure on how to do the error return value. Like I said it works, but if Im going to have it in my library Id like it to be right Func _GDIPlus_GraphicsSetCompositingMode($hGraphic,$mode) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetCompositingMode","handle" ,$hGraphic,"int",$mode) If @error Then Return SetError(@error, @extended, 0) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetCompositingMode This function sets the blend mode for graphics image draw commands. If mode is 0 then the image will be blended according to its alpha. If mode is 1 then the image will replace what its being drawn on without blending. Edited September 2, 2011 by PAEz Share this post Link to post Share on other sites
monoscout999 10 Posted September 2, 2011 It seems fine to me. If you need more GDI functions check the Link in my signature "GDIP.au3" Share this post Link to post Share on other sites
UEZ 1,278 Posted September 2, 2011 Can you give an example what this function is doing exactly? Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Share this post Link to post Share on other sites
monoscout999 10 Posted September 2, 2011 Maybe you can change the return to True or in case of error False @UEZ I don´t have to much idea but it seems that one mode blends the draw with the background and the other don´t #include <GDIPlus.au3> _CreateClearPNG(@DesktopDir & "\MyPNG1.png", false) _CreateClearPNG(@DesktopDir & "\MyPNG2.png", true) Func _CreateClearPNG($sFile, $iComposite) _GDIPlus_Startup() Local $hImage = _GDIPlus_BitmapCreateFromScan0(400, 400) Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) Local $hBrush = _GDIPlus_BrushCreateSolid(0xAA0000FF) If $iComposite then _GDIPlus_GraphicsSetCompositingMode($hGraphics, 1) _GDIPlus_GraphicsClear($hGraphics, 0xffff0000) _gdiplus_graphicsfillellipse($hGraphics,0,0,400,400,$hBrush) _GDIPlus_ImageSaveToFile($hImage, $sFile) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_BitmapDispose($hImage) _GDIPlus_Shutdown() EndFunc ;==>_CreateClearPNG Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0 Func _GDIPlus_GraphicsSetCompositingMode($hGraphic, $mode) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetCompositingMode", "handle", $hGraphic, "int", $mode) If @error Then Return SetError(@error, @extended, 0) Return $aResult[0] = true EndFunc ;==>_GDIPlus_GraphicsSetCompositingMode Share this post Link to post Share on other sites
PAEz 1 Posted September 2, 2011 (edited) Thanks monoscout999 Ill check out your file. And yeah thats what it does monoscout999. Heres my example (you beat me ).... expandcollapse popup#include <GDIPlus.au3> _GDIPlus_Startup() Local $imagespath="C:\Program Files\AutoIt3\Examples\GUI\merlin.gif" Func GdipCreateTexture($hImg, $WrapMode = 0x00) Local $DLL = "gdiplus.dll" Local $RESULT $RESULT = DllCall($DLL, "int", "GdipCreateTexture", "int", $hImg, "int", $WrapMode, "int*", 0) Return $RESULT[3] EndFunc ;==>GdipCreateTexture Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0 Func _GDIPlus_GraphicsSetCompositingMode($hGraphic,$mode) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetCompositingMode","handle" ,$hGraphic,"int",$mode) If @error Then Return SetError(@error, @extended, 0) Return $aResult[0] = 0 EndFunc ;==>_GDIPlus_GraphicsSetCompositingMode Local $TextureImage = _GDIPlus_ImageLoadFromFile( $imagespath) Local $brush = GdipCreateTexture($TextureImage) Local $image = _GDIPlus_BitmapCreateFromScan0(500, 500) Local $graphic = _GDIPlus_ImageGetGraphicsContext($image) ; Blend mode 0 will blend the pic with the graphic _GDIPlus_GraphicsClear($graphic, 0x99FFFFFF) _GDIPlus_GraphicsSetCompositingMode($graphic,0) _GDIPlus_GraphicsFillRect($graphic, 0, 0, 500, 500, $brush) _GDIPlus_ImageSaveToFile ($image, @ScriptDir & "\CombineMode0.png") ; whilst blend mode 1 will totallly replace the graphic with the image _GDIPlus_GraphicsSetCompositingMode($graphic,1) _GDIPlus_GraphicsClear($graphic, 0x99FFFFFF) _GDIPlus_GraphicsFillRect($graphic, 0, 0, 500, 500, $brush) _GDIPlus_ImageSaveToFile ($image, @ScriptDir & "\CombineMode1.png") _GDIPlus_BitmapDispose($TextureImage) _GDIPlus_BitmapDispose($brush) _GDIPlus_BitmapDispose($image) _GDIPlus_GraphicsDispose($graphic) _GDIPlus_Shutdown() Edited September 2, 2011 by PAEz Share this post Link to post Share on other sites
monoscout999 10 Posted September 2, 2011 I edit the example to Splash the images in the screen. expandcollapse popup#include <GDIPlus.au3> _CreatePNG(@DesktopDir & "\MyPNG1.png", false) _CreatePNG(@DesktopDir & "\MyPNG2.png", true) _SPLASHPNG(@DesktopDir & "\MyPNG1.png", 350, 50) _SPLASHPNG(@DesktopDir & "\MyPNG2.png", @desktopwidth - 750, 50) Func _CreatePNG($sFile, $iComposite) _GDIPlus_Startup() Local $hImage = _GDIPlus_BitmapCreateFromScan0(400, 400) Local $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage) Local $hBrush = _GDIPlus_BrushCreateSolid(0xAA0000FF) If $iComposite then _GDIPlus_GraphicsSetCompositingMode($hGraphics, 1) ; 1 = Not Blend _GDIPlus_GraphicsClear($hGraphics, 0xAAff0000) _gdiplus_graphicsfillellipse($hGraphics,0,0,400,400,$hBrush) _GDIPlus_BrushSetSolidColor($hBrush,0xAA00FFFF) _GDIPlus_GraphicsFillRect($hGraphics,0,0,200,200,$hBrush) _GDIPlus_ImageSaveToFile($hImage, $sFile) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_BitmapDispose($hImage) _GDIPlus_Shutdown() EndFunc ;==>_CreateClearPNG Func _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight, $iStride = 0, $iPixelFormat = 0x0026200A, $pScan0 = 0) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", $iStride, "int", $iPixelFormat, "ptr", $pScan0, "int*", 0) If @error Then Return SetError(@error, @extended, 0) Return $aResult[6] EndFunc ;==>_GDIPlus_BitmapCreateFromScan0 Func _GDIPlus_GraphicsSetCompositingMode($hGraphic, $mode) Local $aResult = DllCall($ghGDIPDll, "uint", "GdipSetCompositingMode", "handle", $hGraphic, "int", $mode) If @error Then Return SetError(@error, @extended, 0) Return $aResult[0] = true EndFunc ;==>_GDIPlus_GraphicsSetCompositingMode Func _SPLASHPNG($sPNGFile, $iX, $iY, $iWidth = -1, $iHeight = -1) _GDIPlus_Startup() Local $hImage = _GDIPlus_ImageLoadFromFile($sPNGFile) If $iWidth = -1 Then $iWidth = _GDIPlus_ImageGetWidth($hImage) If $iHeight = -1 Then $iHeight = _GDIPlus_ImageGetHeight($hImage) Local $hDC = _WinAPI_GetDC(0) Local $hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC) _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $iX, $iY, $iWidth, $iHeight) _GDIPlus_GraphicsDispose($hGraphics) _GDIPlus_ImageDispose($hImage) _WinAPI_ReleaseDC(0, $hDC) _GDIPlus_Shutdown() EndFunc ;==>_SPLASHPNG Share this post Link to post Share on other sites
PAEz 1 Posted September 2, 2011 Now your just showing off and thanks for your help. Share this post Link to post Share on other sites
UEZ 1,278 Posted September 2, 2011 Thanks for the examples! _GDIPlus_GraphicsSetCompositingMode() is something like turn on/off alpha channel e.g. from images. Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Share this post Link to post Share on other sites