PAEz Posted September 2, 2011 Share 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 Link to comment Share on other sites More sharing options...
monoscout999 Posted September 2, 2011 Share Posted September 2, 2011 It seems fine to me. If you need more GDI functions check the Link in my signature "GDIP.au3" Link to comment Share on other sites More sharing options...
UEZ Posted September 2, 2011 Share 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!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
monoscout999 Posted September 2, 2011 Share 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 Link to comment Share on other sites More sharing options...
PAEz Posted September 2, 2011 Author Share 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 Link to comment Share on other sites More sharing options...
monoscout999 Posted September 2, 2011 Share 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 Link to comment Share on other sites More sharing options...
PAEz Posted September 2, 2011 Author Share Posted September 2, 2011 Now your just showing off and thanks for your help. Link to comment Share on other sites More sharing options...
UEZ Posted September 2, 2011 Share 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!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now