Malkey Posted May 18, 2008 Share Posted May 18, 2008 (edited) Just play around with it. Discover how different matrices change an image. Or not. expandcollapse popup#include <GDIPlus.au3> #include <ScreenCapture.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <INet.au3> #include <EditConstants.au3> #include <ButtonConstants.au3> #include <Constants.au3> #include <misc.au3> ; Colour Matrix Reference Sites (some) ; http://www.codeproject.com/KB/GDI-plus/colormatrix.aspx ; http://boredzo.org/blog/archives/category/...hics/core-image ; http://www.reflectiveimages.com/digitalvelvia.htm ; http://www.imagemagick.org/Usage/color/ ; http://blog.zacharcher.com/2007/10/ ; Big Thanks Siao ;http://www.autoitscript.com/forum/index.php?s=&showtopic=69930&view=findpost&p=513472 Opt("GUIOnEventMode", 0) Opt('MustDeclareVars', 1) HotKeySet("{ESC}", "Quit") Opt("GUICloseOnESC", 0) Global $dll = DllOpen("user32.dll") Global $iOpacity = 255 Global Const $STM_SETIMAGE = 0x0172 ;Local Const $ULW_ALPHA = 2 ;Global Const $IMAGE_BITMAP = 0 ;Global Const $WM_LBUTTONDOWN = 0x0201 ; Drag Window 1 of 3 addin Global $hBitmap, $hImage, $hImage1, $hGui1, $MatMenuChk = 0, $OrigImageChk = 0 Global $hGui, $hBitmapG, $hGraphic, $hGraphicG, $num, $hWnd, $hDC Global $hBitmapG1, $hGraphic1, $hWnd1, $hDC1, $hGraphicG1, $tColorMatrix Global $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend, $m, $n Global $ColMatBut1, $ColMatBut2, $ColMatBut3, $ColMatBut4, $Combo1 Global $ColMatForm, $comboData, $iX, $iY, $Add2MatrixStr Global $ContextMenu, $viewOrigImg, $viewMatrix, $Demos, $PreSetMat, $ChangeColMat, $MenuItemExit Global $separator1, $Cell[26], $init = 1 Global $LastMatrix, $num Global $a,$b,$c ; To use inside matrix in display. e.g. Assign( "a",0.9) = 1; $a = 0.9 Global $CA[17][26] = [[ "Identity Martix", 1, 0, 0, 0, 0, _ 0, 1, 0, 0, 0, _ 0, 0, 1, 0, 0, _ 0, 0, 0, 1, 0, _ 0, 0, 0, 0, 1], _ [ "Gray Shade", 0.3, 0.3, 0.3, 0, 0, 0.59, 0.59, 0.59, 0, 0, _ 0.11, 0.11, 0.11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Pink Shade", 0.4, 0.3, 0.3, 0, 0, 0.7, 0.59, 0.59, 0, 0, _ 0.2, 0.11, 0.11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Yellow Shade", 0.4, 0.4, 0.3, 0, 0, 0.7, 0.7, 0.59, 0, 0, _ 0.2, 0.2, 0.11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Green Shade", 0.3, 0.4, 0.3, 0, 0, 0.59, 0.7, 0.59, 0, 0, _ 0.11, 0.2, 0.11, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Blue Shade", 0.3, 0.3, 0.4, 0, 0, 0.59, 0.59, 0.7, 0, 0, _ 0.11, 0.11, 0.2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Gray Shade Alternate", 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, _ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0.2, 0.2, 0.2, 0, 1], _ [ "Brighter", 1.5, 0, 0, 0, 0, 0, 1.5, 0, 0, 0, _ 0, 0, 1.5, 0, 0, 0, 0, 0, 1, 0, 0.05, 0.05, 0.05, 0, 1], _ [ "Colour Boost", 1.4, 0, 0, 0, 0, 0, 1.4, 0, 0, 0, _ 0, 0, 1.4, 0, 0, 0, 0, 0, 1, 0, -0.2, -0.2, -0.2, 0, 1], _ [ "Swap Color RGB2GBR", 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, _ 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ ["Swap Color RGB2BRG", 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, _ 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ ["Swap Color RGB2RBG", 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, _ 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Swap Colors Transparent", 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, _ 1, 0, 0, 0, 0, 0, 0, 0, 0.5, 0, 0, 0, 0, 0, 1], _ ["Trial insert in array", 0.7, 0, 0, 0, 0, 0, -0.9, 0, 0, 0, _ 0, 0, -0.9, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "All White", 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, _ 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 01, 1], _ [ "All Black", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], _ [ "Test Martix", 0xff / 0xff + 0.11, 0, 0, 0, 0, _ 0, Assign( "a",0.9), 0, 0, 0, _ 0, 0, -$a/3, 0, 0, _ 0, 0, 0, 1, 0, _ 0, 0, 0, 0, 1 ]] ; In the ReadMat() Function, Execute(GUICtrlRead($Cell[$P])) is used to read Matrix data displayed. ; Test Matrix above works Local $iI, $iSize, $tBits, $tBMI, $hDC $LastMatrix = UBound($CA, 1) - 1 $num = $LastMatrix ColorMatForm() _GDIPlus_Startup () Local $ImageSrce, $Button1, $Button2, $Button3, $Button4, $Label1 $ImageSrce = GUICreate("Source of Image", 204, 221, 351, 250, BitOR($WS_DLGFRAME, $WS_CLIPSIBLINGS)) GUISetIcon("D:\002.ico") GUISetBkColor(0xFFFFE1) $Button1 = GUICtrlCreateButton("Screen Capture", 33, 37, 127, 25, 0) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetTip($Button1, "Capture Top Left quarter of desktop") $Button2 = GUICtrlCreateButton("Download Image", 34, 77, 127, 25, 0) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetTip($Button2, "If the 'autoit_builder_wall_800x600.jpg' file (122KB) is not in this script directory" & @CRLF & _ "The file will auto-download from www.autoitscript.com, and be saved to this script directory. ") $Button3 = GUICtrlCreateButton("Open File ", 34, 117, 127, 25, 0) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetTip($Button3, "Opens Dialog for selection of an image.") $Button4 = GUICtrlCreateButton("Exit", 61, 157, 75, 25, 0) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xFF0000) $Label1 = GUICtrlCreateLabel("Choose Image Source", 7, 4, 192, 24) GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x0000FF) GUISetState(@SW_SHOW) While 1 Local $nMsg = GUIGetMsg() Switch $nMsg Case $Button4 Exit Case $Button1 $hBitmap = _ScreenCapture_Capture ("", 0, 0, @DesktopWidth / 2.1, @DesktopHeight / 2.1, False) If Not @error Then ExitLoop Case $Button2 If Not FileExists("autoit_builder_wall_800x600.jpg") Then InetGet("http://www.autoitscript.com/autoit3/files/graphics/autoit_builder_wall_800x600.jpg", _ @ScriptDir & "\autoit_builder_wall_800x600.jpg", 1, 0) ;While @InetGetActive ; TrayTip("Downloading", "Bytes = " & @InetGetBytesRead, 10, 16) ; Sleep(250) ;Wend EndIf Local $hImg = _GDIPlus_ImageLoadFromFile (@ScriptDir & "\autoit_builder_wall_800x600.jpg") If $hImg = 0 Then SetError(1, 0, 0) $hBitmap = _GDIPlus_ImageCreateGDICompatibleHBITMAP($hImg) _GDIPlus_ImageDispose ($hImg) If Not @error Then ExitLoop Case $Button3 Local $Path = FileOpenDialog("Choose Image File", @ScriptDir & "", _ "Images (*.gif;*.png;*.jpg;*.bmp)| All (*.*)") If $Path <> "" Then Local $hImg = _GDIPlus_ImageLoadFromFile ($Path) If $hImg = 0 Then SetError(1, 0, 0) Local $hBitmap = _GDIPlus_ImageCreateGDICompatibleHBITMAP($hImg) _GDIPlus_ImageDispose ($hImg) If Not @error Then ExitLoop EndIf EndSwitch WEnd GUIDelete($ImageSrce) Opt("GUIOnEventMode", 1) ShowaColMatFrm() $hImage = _GDIPlus_BitmapCreateFromHBITMAP ($hBitmap) $iX = _GDIPlus_ImageGetWidth ($hImage) $iY = _GDIPlus_ImageGetHeight ($hImage) _WinAPI_DeleteObject ($hBitmap) $hGui = GUICreate("GDI+", $iX, $iY, 10, 10, $WS_POPUP, $WS_EX_LAYERED) ;BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) GUIRegisterMsg($WM_LBUTTONDOWN, "_WinMove") ; Drag Window 2 of 3 addin GUISetState(@SW_HIDE, $hGui) ;@SW_SHOW $hWnd = _WinAPI_GetDC ($hGui) $hDC = _WinAPI_CreateCompatibleDC ($hWnd) $hBitmapG = _WinAPI_CreateCompatibleBitmap ($hWnd, $iX, $iY) ; $iWidth, $iHeight) _WinAPI_SelectObject ($hDC, $hBitmapG) $hGraphicG = _GDIPlus_GraphicsCreateFromHDC ($hDC) _GDIPlus_GraphicsDrawImage ($hGraphicG, $hImage, 0, 0) $tSize = DllStructCreate($tagSIZE) $pSize = DllStructGetPtr($tSize) DllStructSetData($tSize, "X", $iX) ;$iWidth ) DllStructSetData($tSize, "Y", $iY) ;$iHeight) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, "Alpha", $iOpacity) DllStructSetData($tBlend, "Format", 1) _WinAPI_UpdateLayeredWindow ($hGui, $hWnd, 0, $pSize, $hDC, $pSource, 0, $pBlend, $ULW_ALPHA) $hGui1 = GUICreate("GDI1", $iX, $iY, $iX, 20, $WS_POPUP, $WS_EX_LAYERED) ; BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST)) $ContextMenu = GUICtrlCreateContextMenu() $viewOrigImg = GUICtrlCreateMenuItem("Show Original Image", $ContextMenu) GUICtrlSetOnEvent($viewOrigImg, "ShowaOrig") GUICtrlSetState($viewOrigImg, $GUI_UNCHECKED) $viewMatrix = GUICtrlCreateMenuItem("Show Matrix", $ContextMenu) GUICtrlSetOnEvent($viewMatrix, "ShowaColMatFrm") GUICtrlSetState($viewMatrix, $GUI_CHECKED) $Demos = GUICtrlCreateMenu("Demos", $ContextMenu) $PreSetMat = GUICtrlCreateMenuItem("Preset Matrices - Press Crtl key to scroll thru array of matrices.", $Demos) GUICtrlSetOnEvent($PreSetMat, "ScrollMatArray") $ChangeColMat = GUICtrlCreateMenuItem("Auto Change Colors (Press Shift once) @ Esc once to stop", $Demos) GUICtrlSetOnEvent($ChangeColMat, "AutoColChange") $separator1 = GUICtrlCreateMenuItem("", $ContextMenu) ; create a separator line $MenuItemExit = GUICtrlCreateMenuItem("Exit (Esc)", $ContextMenu) GUICtrlSetOnEvent($MenuItemExit, "Quit") GUISetState() $hWnd1 = _WinAPI_GetDC ($hGui1) $hDC1 = _WinAPI_CreateCompatibleDC ($hWnd1) $hImage1 = $hImage While 1 If _IsPressed("11") Or $init = 1 Then ;Ctrl key and initial run ScrollMatArray() EndIf If _IsPressed("A1") Or _IsPressed("A0") Then ; Right Shift and Left Shift keys AutoColChange() EndIf $init = 0 Sleep(10) WEnd DllClose($dll) _GDIPlus_GraphicsDispose ($hGraphicG) _WinAPI_ReleaseDC ($hGui, $hWnd) _WinAPI_DeleteObject ($hBitmap) _WinAPI_DeleteDC ($hDC) _GDIPlus_ImageDispose ($hImage) _WinAPI_ReleaseDC ($hGui1, $hWnd1) _WinAPI_DeleteDC ($hDC1) _GDIPlus_ImageDispose ($hImage1) _GDIPlus_Shutdown () ; Displays image with the applied matrix Func ImageMatrix() Local $pSize1, $tSize1, $pSource1, $tSource1, $pBlend1, $tBlend1, $tColorMatrix Local $x, $hImgAttrib, $iW = _GDIPlus_ImageGetWidth ($hImage1), _ $iH = _GDIPlus_ImageGetHeight ($hImage1), $hGraphics, $hBitmap $hBitmapG1 = _WinAPI_CreateCompatibleBitmap ($hWnd1, $iX, $iY) ; $iWidth, $iHeight) _WinAPI_SelectObject ($hDC1, $hBitmapG1) $hGraphicG1 = _GDIPlus_GraphicsCreateFromHDC ($hDC1) $tColorMatrix = DllStructCreate("float[5];float[5];float[5];float[5];float[5]") ;; Loads current Matrix int matrix display Gui LoadMat2Display($num) ;;Color adjustment values: $x = DllStructSetData($tColorMatrix, 1, $CA[$num][1], 1) * DllStructSetData($tColorMatrix, 1, $CA[$num][2], 2) * _ DllStructSetData($tColorMatrix, 1, $CA[$num][3], 3) * DllStructSetData($tColorMatrix, 2, $CA[$num][6], 1) * _ DllStructSetData($tColorMatrix, 2, $CA[$num][7], 2) * DllStructSetData($tColorMatrix, 2, $CA[$num][8], 3) * _ DllStructSetData($tColorMatrix, 3, $CA[$num][11], 1) * DllStructSetData($tColorMatrix, 3, $CA[$num][12], 2) * _ DllStructSetData($tColorMatrix, 3, $CA[$num][13], 3) * DllStructSetData($tColorMatrix, 4, $CA[$num][19], 4) * _ DllStructSetData($tColorMatrix, 5, $CA[$num][21], 1) * DllStructSetData($tColorMatrix, 5, $CA[$num][22], 2) * _ DllStructSetData($tColorMatrix, 5, $CA[$num][23], 3) * _ DllStructSetData($tColorMatrix, 5, $CA[$num][24], 4) * DllStructSetData($tColorMatrix, 5, $CA[$num][25], 5) ;;create an image attributes object and update its color matrix $hImgAttrib = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetColorMatrix($hImgAttrib, 1, DllStructGetPtr($tColorMatrix)) ;;draw original into copy with attributes _GDIPlus_GraphicsDrawImageRectRectEx($hGraphicG1, $hImage1, 0, 0, $iW, $iH, 0, 0, $iW, $iH, 2, $hImgAttrib) $tSize1 = DllStructCreate($tagSIZE) $pSize1 = DllStructGetPtr($tSize1) DllStructSetData($tSize1, "X", $iX) ;$iWidth ) DllStructSetData($tSize1, "Y", $iY) ;$iHeight) $tSource1 = DllStructCreate($tagPOINT) $pSource1 = DllStructGetPtr($tSource1) $tBlend1 = DllStructCreate($tagBLENDFUNCTION) $pBlend1 = DllStructGetPtr($tBlend1) DllStructSetData($tBlend1, "Alpha", $iOpacity) DllStructSetData($tBlend1, "Format", 1) _WinAPI_UpdateLayeredWindow ($hGui1, $hWnd1, 0, $pSize1, $hDC1, $pSource1, 0, $pBlend1, $ULW_ALPHA) ;;clean up _GDIPlus_GraphicsDispose ($hGraphics) _GDIPlus_GraphicsDispose ($hGraphicG1) _GDIPlus_ImageAttributesDispose($hImgAttrib) _WinAPI_DeleteObject ($hBitmap) _WinAPI_DeleteObject ($hBitmapG1) Return 1 EndFunc ;==>ImageMatrix Func _GDIPlus_ImageAttributesSetColorMatrix($hImgAttrib, $iColorAdjustType, _ $pColorMatrix = 0, $pGreyMatrix = 0, $iColorMatrixFlags = 0) Local $fEnable = 1, $aResult = DllCall($ghGDIPDll, "int", _ "GdipSetImageAttributesColorMatrix", "ptr", $hImgAttrib, "int", $iColorAdjustType, _ "int", $fEnable, "ptr", $pColorMatrix, "ptr", $pGreyMatrix, "int", $iColorMatrixFlags) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_ImageAttributesSetColorMatrix ;;Creates ImageAttributes object Func _GDIPlus_ImageAttributesCreate() Local $aResult = DllCall($ghGDIPDll, "int", _ "GdipCreateImageAttributes", "ptr*", 0) Return SetError($aResult[0], 0, $aResult[1]) EndFunc ;==>_GDIPlus_ImageAttributesCreate ;;Deletes ImageAttributes object Func _GDIPlus_ImageAttributesDispose($hImgAttrib) Local $aResult = DllCall($ghGDIPDll, "int", _ "GdipDisposeImageAttributes", "ptr", $hImgAttrib) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_ImageAttributesDispose ; _GDIPlus_GraphicsDrawImageRectRectEx() ; Same as _GDIPlus_GraphicsDrawImageRectRect(), ; but adds 1 optional parameter - $hImgAttrib (handle to ImageAttributes object) Func _GDIPlus_GraphicsDrawImageRectRectEx($hGraphics, $hImage, $iSrcX, $iSrcY, $iSrcWidth, _ $iSrcHeight, $iDstX, $iDstY, $iDstWidth, $iDstHeight, $iUnit = 2, $hImgAttrib = 0) Local $aResult = DllCall($ghGDIPDll, "int", "GdipDrawImageRectRectI", "hwnd", _ $hGraphics, "hwnd", $hImage, "int", $iDstX, "int", _ $iDstY, "int", $iDstWidth, "int", $iDstHeight, "int", $iSrcX, "int", $iSrcY, "int", _ $iSrcWidth, "int", $iSrcHeight, "int", $iUnit, "ptr", $hImgAttrib, "int", 0, "int", 0) Return SetError($aResult[0], 0, $aResult[0] = 0) EndFunc ;==>_GDIPlus_GraphicsDrawImageRectRectEx ; Demo - Scroll thru Matrix Array Func ScrollMatArray() $init = 0 $num = Mod($num + 1, $LastMatrix + 1) ;$num = 13 GUICtrlSetData($Combo1, $CA[$num][0]) ImageMatrix() Return 1 EndFunc ;==>ScrollMatArray ; Demo - Auto Colour Change Func AutoColChange() If $init = 2 Then $init = 0 Else $init = 2 $num = 0 LoadMat2Display($num) $num = $LastMatrix GUICtrlSetData($Combo1, $CA[$num][0]) EndIf While $init = 2 If _IsPressed("11") Or _IsPressed("1B") Then ExitLoop ;CTRL key and Escape key $m = Mod($m + 1, 20) $n = Mod($n + 1, 24) $CA[$LastMatrix][1] = -($m - 8) / 10 $CA[$LastMatrix][7] = ($m - 10) / 10 $CA[$LastMatrix][13] = -($n - 12) / 10 ImageMatrix() Sleep(1000) WEnd $init = 0 Sleep(800) Return 1 EndFunc ;==>AutoColChange ; Toggles show/hide original image Func ShowaOrig() If $OrigImageChk = 1 Then GUICtrlSetState($viewOrigImg, $GUI_UNCHECKED) GUISetState(@SW_HIDE, $hGui) $OrigImageChk = 0 Else GUICtrlSetState($viewOrigImg, $GUI_CHECKED) GUISetState(@SW_SHOW, $hGui) $OrigImageChk = 1 EndIf Return 1 EndFunc ;==>ShowaOrig ; Toggles show/hide matrix Gui Func ShowaColMatFrm() If $MatMenuChk = 1 Then GUICtrlSetState($viewMatrix, $GUI_UNCHECKED) GUISetState(@SW_HIDE, $ColMatForm) $MatMenuChk = 0 Else GUICtrlSetState($viewMatrix, $GUI_CHECKED) GUISetState(@SW_SHOW, $ColMatForm) $MatMenuChk = 1 EndIf ; ;MsgBox(0,"",GUICtrlRead($viewMatrix)) Return 1 EndFunc ;==>ShowaColMatFrm ;When selection in combo, load corresponding matrix Func ComboLoadMatDat() Local $dat, $f $dat = GUICtrlRead($Combo1) For $f = 0 To $LastMatrix If $CA[$f][0] = $dat Then $num = $f Next ;ReadMat($num) ;GUICtrlSetData($Combo1, $CA[$num][0]) ImageMatrix() Return 1 EndFunc ;==>ComboLoadMatDat ; Loads current Matrix int matrix display Gui Func LoadMat2Display($number = $LastMatrix) If $MatMenuChk = 1 Then For $P = 1 To 25 GUICtrlSetData($Cell[$P], $CA[$number][$P]) Next EndIf Return 1 EndFunc ;==>LoadMat2Display ;When Apply Matrix is pressed, Stores Matrix's element values to last matrix in array Func ApplyColMat() $num = $LastMatrix ReadMat($num) GUICtrlSetData($Combo1, $CA[$num][0]) ImageMatrix() Return 1 EndFunc ;==>ApplyColMat ; Reads Matrix in Gui and enters into last matrix in array of matrices Func ReadMat($number = $LastMatrix) For $P = 1 To 25 $CA[$number][$P] = Execute(GUICtrlRead($Cell[$P])) Next Return 1 EndFunc ;==>ReadMat ; To save matrix data - writes to console. Formatted to copy into $CA matrix array at top of script. Func WriteConsole() $Add2MatrixStr &= "[" & '"' & "Change to your label" & '"' & ", " For $x = 1 To 10 $Add2MatrixStr &= $CA[$LastMatrix][$x] & ", " Next $Add2MatrixStr &= "_" & @CRLF For $x = 11 To 25 $Add2MatrixStr &= $CA[$LastMatrix][$x] & ", " Next $Add2MatrixStr = StringTrimRight($Add2MatrixStr, 2) $Add2MatrixStr &= "], _" & @CRLF & @CRLF ConsoleWrite($Add2MatrixStr) ConsoleWrite("Copy above matrix. Insert between existing matrices in declaration of Global $CA[14][26]" & @CRLF & _ " in script. Also, increase number of matrices in array. " & @CRLF & _ "eg. if $CA[14][26] increase to $CA[15][26] Then re-run script. " & @CRLF) EndFunc ;==>WriteConsole ;Saves generated image to disk Func SaveImage() Local $ext, $sCLSID Local $Path = FileSaveDialog("Save Current Image", @ScriptDir, "Images (*.gif;*.png;*.jpg;*.bmp)| All (*.*)", 16) If $Path <> "" Then $ext = StringUpper(StringRight($Path, 3)) If $ext = "GIF" Or $ext = "PNG" Or $ext = "JPG" Or $ext = "BMP" Then $sCLSID = _GDIPlus_EncodersGetCLSID ($ext) ;$SaveFlag = 1 ApplyColMat() Local $tColorMatrix, $x, $hImgAttrib, $iW = _GDIPlus_ImageGetWidth ($hImage1) Local $iH = _GDIPlus_ImageGetHeight ($hImage1), $hGraphics Local $hGraphics2, $hBitmap ;;create color matrix data $tColorMatrix = DllStructCreate("float[5];float[5];float[5];float[5];float[5]") LoadMat2Display($num) $x = DllStructSetData($tColorMatrix, 1, $CA[$num][1], 1) * DllStructSetData($tColorMatrix, 1, $CA[$num][2], 2) * _ DllStructSetData($tColorMatrix, 1, $CA[$num][3], 3) * DllStructSetData($tColorMatrix, 2, $CA[$num][6], 1) * _ DllStructSetData($tColorMatrix, 2, $CA[$num][7], 2) * DllStructSetData($tColorMatrix, 2, $CA[$num][8], 3) * _ DllStructSetData($tColorMatrix, 3, $CA[$num][11], 1) * DllStructSetData($tColorMatrix, 3, $CA[$num][12], 2) * _ DllStructSetData($tColorMatrix, 3, $CA[$num][13], 3) * DllStructSetData($tColorMatrix, 4, $CA[$num][19], 4) * _ DllStructSetData($tColorMatrix, 5, $CA[$num][21], 1) * DllStructSetData($tColorMatrix, 5, $CA[$num][22], 2) * _ DllStructSetData($tColorMatrix, 5, $CA[$num][23], 3) * _ DllStructSetData($tColorMatrix, 5, $CA[$num][24], 4) * DllStructSetData($tColorMatrix, 5, $CA[$num][25], 5) ;;create an image attributes object and update its color matrix $hImgAttrib = _GDIPlus_ImageAttributesCreate() _GDIPlus_ImageAttributesSetColorMatrix($hImgAttrib, 1, DllStructGetPtr($tColorMatrix)) ;;copy image $hGraphics = _GDIPlus_ImageGetGraphicsContext ($hImage1) $hBitmap = _GDIPlus_BitmapCreateFromGraphics ($iW, $iH, $hGraphics) $hGraphics2 = _GDIPlus_ImageGetGraphicsContext ($hBitmap) ;;draw original into copy with attributes _GDIPlus_GraphicsDrawImageRectRectEx($hGraphics2, $hImage1, 0, 0, $iW, $iH, 0, 0, $iW, $iH, 2, $hImgAttrib) ;;clean up _GDIPlus_GraphicsDispose ($hGraphics) _GDIPlus_GraphicsDispose ($hGraphics2) _GDIPlus_ImageAttributesDispose($hImgAttrib) ; Save image _GDIPlus_ImageSaveToFileEx ($hBitmap, $Path, $sCLSID) _GDIPlus_GraphicsDispose ($hGraphics) _GDIPlus_GraphicsDispose ($hGraphics2) _GDIPlus_ImageAttributesDispose($hImgAttrib) _GDIPlus_ImageDispose ($hBitmap) EndIf EndIf Return 1 EndFunc ;==>SaveImage ; If in Auto-generate demo Esc exits that loop. Otherwise, exits script. Func Quit() Local $e If $init = 2 Then ; For AutoColChange() while loop $init = 0 Else $e = MsgBox(1, "Exit", "Press OK to Exit") If $e = 1 Then Exit EndIf Return 1 EndFunc ;==>Quit ; The Gui contains matrix data display, buttons and combobox of pre-defined matrices from array. Func ColorMatForm() Local $Group1, $Group2, $Group3, $Group4, $Group5, $Group6, $Group7, $Label1, $Label2 $ColMatForm = GUICreate("Form1", 775, 243, 290, @DesktopHeight * 0.7, BitOR($WS_POPUP, $WS_BORDER)) $Group1 = GUICtrlCreateGroup("Color Matrix 5x5", 6, 4, 760, 197) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Group2 = GUICtrlCreateGroup(" Red ", 148, 19, 137, 101) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0xFF0000) $Cell[1] = GUICtrlCreateInput("0xff / 0xff + 0.11", 154, 36, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[2] = GUICtrlCreateInput("0", 293, 36, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[3] = GUICtrlCreateInput("0", 430, 36, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group3 = GUICtrlCreateGroup("Green", 288, 19, 137, 101) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x00A000) $Cell[4] = GUICtrlCreateInput("0", 564, 36, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[5] = GUICtrlCreateInput("0", 692, 36, 49, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[6] = GUICtrlCreateInput("0", 154, 64, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group4 = GUICtrlCreateGroup(" Blue ", 425, 19, 133, 101) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x0000FF) $Cell[7] = GUICtrlCreateInput("1", 293, 64, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[8] = GUICtrlCreateInput("0", 430, 64, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[9] = GUICtrlCreateInput("0", 564, 64, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group5 = GUICtrlCreateGroup(" Unused ", 558, 19, 191, 101) $Cell[10] = GUICtrlCreateInput("0", 692, 64, 49, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[11] = GUICtrlCreateInput("0", 154, 92, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[12] = GUICtrlCreateInput("0", 293, 92, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[13] = GUICtrlCreateInput("1", 430, 93, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[14] = GUICtrlCreateInput("0", 564, 93, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[15] = GUICtrlCreateInput("0", 693, 93, 49, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group6 = GUICtrlCreateGroup("", 148, 114, 601, 39) $Cell[16] = GUICtrlCreateInput("0", 154, 124, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[17] = GUICtrlCreateInput("0", 293, 124, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[18] = GUICtrlCreateInput("0", 430, 124, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) $Cell[19] = GUICtrlCreateInput("1", 564, 124, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[20] = GUICtrlCreateInput("0", 692, 124, 49, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group7 = GUICtrlCreateGroup("", 148, 146, 601, 39) $Cell[21] = GUICtrlCreateInput("0", 154, 156, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[22] = GUICtrlCreateInput("0", 293, 156, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[23] = GUICtrlCreateInput("0", 430, 156, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[24] = GUICtrlCreateInput("0", 564, 156, 125, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) $Cell[25] = GUICtrlCreateInput("1", 692, 156, 49, 24, BitOR($ES_RIGHT, $ES_AUTOHSCROLL)) GUICtrlSetBkColor(-1, 0xD4D0C8) GUICtrlCreateGroup("", -99, -99, 1, 1) $Label1 = GUICtrlCreateLabel("Alpha Channel", 44, 128, 106, 20) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") $Label2 = GUICtrlCreateLabel("RGBA Additive Row", 8, 158, 142, 21) GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif") For $f = 0 To $LastMatrix $comboData &= $CA[$f][0] & "|" Next $Combo1 = GUICtrlCreateCombo("", 10, 28, 133, 25) GUICtrlSetData($Combo1, StringTrimRight($comboData, 1)) GUICtrlSetOnEvent($Combo1, "ComboLoadMatDat") GUICtrlCreateGroup("", -99, -99, 1, 1) $ColMatBut1 = GUICtrlCreateButton("Save Current Image", 4, 206, 120, 30, $BS_FLAT) GUICtrlSetBkColor(-1, 0x00FFFF) GUICtrlSetOnEvent($ColMatBut1, "SaveImage") $ColMatBut2 = GUICtrlCreateButton("Write Matrix to Console", 132, 207, 118, 30, $BS_FLAT) GUICtrlSetBkColor(-1, 0xFFFF00) GUICtrlSetOnEvent($ColMatBut2, "WriteConsole") $ColMatBut3 = GUICtrlCreateButton("Apply Matrix ", 260, 207, 125, 30, $BS_FLAT) GUICtrlSetBkColor(-1, 0x00FF00) GUICtrlSetOnEvent($ColMatBut3, "ApplyColMat") $ColMatBut4 = GUICtrlCreateButton("Hide Matrix Display", 393, 206, 100, 30, $BS_FLAT) GUICtrlSetBkColor(-1, 0xFF00FF) GUICtrlSetOnEvent($ColMatBut4, "ShowaColMatFrm") Return 1 EndFunc ;==>ColorMatForm ; Description:: Converts a GDIPlus-Image to GDI-combatible HBITMAP ; Parameter(s): $hImg -> GDIplus Image object ; Requirement(s): GDIPlus.au3 ; Return Value(s): HBITMAP, compatible with ClipBoard ; Author(s): Prog@ndy Func _GDIPlus_ImageCreateGDICompatibleHBITMAP($hImg) Local $hBitmap2 = _GDIPlus_BitmapCreateHBITMAPFromBitmap ($hImg) Local $hBitmap = _WinAPI_CopyImage($hBitmap2, 0, 0, 0, $LR_COPYDELETEORG + $LR_COPYRETURNORG) _WinAPI_DeleteObject ($hBitmap2) Return $hBitmap EndFunc ;==>_GDIPlus_ImageCreateGDICompatibleHBITMAP ; Description:: Copies an image, also makes GDIPlus-HBITMAP to GDI32-BITMAP ; Parameter(s): $hImg -> HBITMAP Object, GDI or GDIPlus ; Requirement(s): WinAPI.au3 ; Return Value(s): Succes: Handle to new Bitmap, Error: 0 ; Author(s): Prog@ndy Func _WinAPI_CopyImage($hImg, $uType = 0, $x = 0, $y = 0, $flags = 0) Local $aResult $aResult = DllCall("User32.dll", "hwnd", "CopyImage", "hwnd", $hImg, "UINT", $uType, "int", $x, "int", $y, "UINT", $flags) ;_WinAPI_Check ("_WinAPI_CopyImage", ($aResult[0] = 0), 0, True) Return $aResult[0] EndFunc ;==>_WinAPI_CopyImage ; Drag Window 3 of 3 addin Func _WinMove($hWnd, $Command, $wParam, $lParam) If BitAND(WinGetState($hWnd), 32) Then Return $GUI_RUNDEFMSG ;DllCall("user32.dll", "long", "SendMessage", "hwnd", $HWnd, "int", $WM_SYSCOMMAND, "int", 0xF009, "int", 0) DllCall("user32.dll", "int", "SendMessage", "hWnd", $hWnd, "int", $WM_NCLBUTTONDOWN, "int", $HTCAPTION, "int", 0) Return 1 EndFunc ;==>_WinMove To learn more about a Colour Matrix, here are some reference sites. http://www.codeproject.com/KB/GDI-plus/colormatrix.aspx http://boredzo.org/blog/archives/category/...hics/core-image http://www.reflectiveimages.com/digitalvelvia.htm http://www.imagemagick.org/Usage/color/ http://blog.zacharcher.com/2007/10/ Edit: Added Picture Effects to thread title. Edited November 6, 2011 by Malkey Link to comment Share on other sites More sharing options...
EvAsion Posted June 4, 2008 Share Posted June 4, 2008 wow! thats really useful. Thanks. |-- Periodic Table --||-- Dynamic Class Timetable --||-- Navigation in Counter-Strike --| Link to comment Share on other sites More sharing options...
XxXFaNtA Posted June 4, 2008 Share Posted June 4, 2008 Great! Have been trying to do that in GDI+ aswell but couldn't really manage it! Great alternative to prospeeds function /[center][/center] Link to comment Share on other sites More sharing options...
ludocus Posted June 4, 2008 Share Posted June 4, 2008 Wow... Impressive, Cool and sweet! Link to comment Share on other sites More sharing options...
ludocus Posted June 4, 2008 Share Posted June 4, 2008 I would change the title to: 'Picture effects' if I were you Link to comment Share on other sites More sharing options...
XxXFaNtA Posted June 4, 2008 Share Posted June 4, 2008 I wouldn't. The Title states out what this does..."Picture Effects" would be maybe interesting for noobs to play around, but wouldn't actually tell people what it's used for! /[center][/center] 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