cppman Posted September 11, 2006 Share Posted September 11, 2006 (edited) Okay, it took me all (and i mean) all day to get the formula right for alpha blending.. but i finally got it i was so happy. So I wrote a UDF for people to use, and an example of what it is/does. the udf is in: trans.au3 it is the following: _CreateAlpha($color1, $color2, $alpha) $color1 & $color2 need to be an array of RGB values. As so in this program. The alpha value needs to be a number between 0.0 and 1.0 (1 = completely visible, 0 = completly covered by the color you chose) here is the program example: *NOTE: the program is really slow considering the way i did it * in order to run it u need this file: trans.au3 expandcollapse popup#include "trans.au3" #include <misc.au3> AutoItSetOption("PixelCoordMode", 0) Global $IMAGE_LOCATION = "" Global $SHADE_COLOR = 0x000000 $Form1 = GUICreate("Image Blending", 861, 258, 131, 139) $Group1 = GUICtrlCreateGroup("Before", 3, 4, 314, 249) $BeforePic = GUICtrlCreatePic("", 8, 18, 303, 230, BitOR($SS_NOTIFY,$WS_GROUP)) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group2 = GUICtrlCreateGroup("After", 318, 4, 328, 249) $AfterGraphic = GUICtrlCreateGraphic(324, 20, 317, 228) GUICtrlSetColor(-1, 0xECE9D8) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button1 = GUICtrlCreateButton("Load Image", 649, 11, 174, 23, 0) $Button2 = GUICtrlCreateButton("Shade Color", 648, 36, 174, 23, 0) $Button3 = GUICtrlCreateButton("Start Shader", 648, 60, 174, 23, 0) GUISetState(@SW_SHOW) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $Button1 $IMAGE_LOCATION = FileOpenDialog("Choose an Image", "", "Image Files(*.bmp;*.jpg;*.gif)") GUICtrlSetImage($BeforePic, $IMAGE_LOCATION) case $msg = $Button2 $SHADE_COLOR = _ChooseColor() case $msg = $Button3 StartShader() EndSelect WEnd Exit Func StartShader() $al_value = InputBox("Alpha Value", "Enter the alpha value for your selected color: (0.0 - 1.0)") GUICtrlSetImage($BeforePic, $IMAGE_LOCATION) Local $pixel_x Local $pixel_y Local $pixel_color Local $graphic_x Local $graphic_y Local $progress $pos = WinGetPos("Image Blending") $cpos = ControlGetPos("", "", $BeforePic) $image_width = $cpos[2] $image_height = $cpos[3] $image_x = $cpos[0]+3 $image_y = $cpos[1]+30 for $x = $image_x to $image_width for $y = $image_y to $image_height $graphic_y += 1 $color = PixelGetColor($x, $y) $PixelColor = _HexToRGB($color) $ShaderColor = _HexToRGB($SHADE_COLOR) $alpha = _CreateAlpha($PixelColor, $ShaderColor, $al_value) GUICtrlSetGraphic($AfterGraphic, $GUI_GR_COLOR, $alpha) GUICtrlSetGraphic($AfterGraphic, $GUI_GR_PIXEL, $x-11, $y-(18+30)) Next GUICtrlSetGraphic($AfterGraphic, $GUI_GR_REFRESH) Next EndFunc Edited September 11, 2006 by CHRIS95219 Miva OS Project Link to comment Share on other sites More sharing options...
jvanegmond Posted September 13, 2006 Share Posted September 13, 2006 (edited) That's funny.. because when i googled "alpha blending" this was the first thing that popped up: Value = Value0(1.0 - Alpha) + Value1(Alpha) Anyway, nice function. May come in handy one day. Edited September 13, 2006 by Manadar github.com/jvanegmond 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