Arbeite soeben an meiner Vista-Toolbar.dll mit fading Buttons.
Musste mich deswegen mit Alphablend herumschlagen.
Habe hier ein kleines Beispiel extrahiert, vielleicht kann es wer brauchen.
Lg. Legion
Download:AlphaBlend.zip

Code: Alles auswählen
Prototype AlphaBlend(DestDC,x1,y1,w1,h1,SourceDC,x2,y2,w2,h2,BF)
Msimg32 = OpenLibrary(#PB_Any, "msimg32.dll")
If Msimg32
Global AlphaBlend_.AlphaBlend = GetFunction(msimg32, "AlphaBlend")
Else
MessageRequester("Fehler!","Kann msimg32.dll nicht öffnen !",#MB_ICONERROR)
Goto EXIT
EndIf
#AC_SRC_OVER = 0 ;Die Quelle wird über dem Ziel gezeichnet
#AC_SRC_ALPHA = 1 ;Das Quellbitmap enthält bereits einen Alphawert
Enumeration
#Window_0
#Gadget_1
#Gadget_2
EndEnumeration
Enumeration
#Image_0
#Image_1
EndEnumeration
Global Kanal.b
Procedure Open_Window_0()
If OpenWindow(#Window_0, 197, 203, 400, 360, "AlphaBlend", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar |#PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget)
If CreateGadgetList(WindowID(#Window_0))
CheckBoxGadget(#Gadget_1, 150, 310, 100,25,"Mit Alphakanal")
TrackBarGadget(#Gadget_2, 10, 330, 370, 25, 0, 255 )
EndIf
EndIf
EndProcedure
Procedure BlendImages(Image1,Image2,AlphaWert,AlphaFormat)
Protected BackImageID,NewImageHDC,BF,*BF.BLENDFUNCTION = @BF
*BF\BlendOp = #AC_SRC_OVER
*BF\BlendFlags = 0
*BF\SourceConstantAlpha = AlphaWert
*BF\AlphaFormat = AlphaFormat
WinHDC = GetDC_(WindowID(#Window_0)) : TempDC = CreateCompatibleDC_(WinHDC)
BackImageID = CreateImage(#PB_Any,ImageWidth(Image1),ImageHeight(Image1))
NewImageHDC = StartDrawing(ImageOutput(BackImageID))
SelectObject_(TempDC,ImageID(Image1))
BitBlt_(NewImageHDC,0,0,ImageWidth(Image1),ImageHeight(Image1),TempDC,0,0,#SRCCOPY)
SelectObject_(TempDC,ImageID(Image2))
AlphaBlend_(NewImageHDC,0,0,ImageWidth(Image1),ImageHeight(Image1),TempDC,0,0,ImageWidth(Image2),ImageHeight(Image2),BF)
StopDrawing()
SelectObject_(TempDC,ImageID(BackImageID))
BitBlt_(WinHDC,0,0,ImageWidth(Image1),ImageHeight(Image1),TempDC,0,0,#SRCCOPY)
ReleaseDC_(WindowID(#Window_0),WinHDC) : DeleteDC_(TempDC) : FreeImage(BackImageID)
EndProcedure
CatchImage(#Image_0,?UFO1)
CatchImage(#Image_1,?UFO2)
Open_Window_0()
BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),0)
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If Event = #PB_Event_Gadget
If GadgetID = #Gadget_1
Kanal = GetGadgetState(#Gadget_1)
If Kanal = 0 : BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),0)
Else : BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),#AC_SRC_ALPHA) : EndIf
EndIf
If GadgetID = #Gadget_2
If Kanal = 0 : BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),0)
Else : BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),#AC_SRC_ALPHA)
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
FreeImage(#Image_0)
FreeImage(#Image_1)
EXIT:
DataSection
UFO1: IncludeBinary "Mein Pfad\UFO1.bmp"
UFO2: IncludeBinary "Mein Pfad\UFO3.bmp"
EndDataSection
Code: Alles auswählen
If Event = #PB_Event_Gadget
If GadgetID = #Gadget_1
Kanal = GetGadgetState(#Gadget_1)
If Kanal = 0
BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),0)
Else
BlendImages(#Image_0,#Image_1,GetGadgetState(#Gadget_2),#AC_SRC_ALPHA)
EndIf
...
..und wie kommst du dabei auf photoshop?AlphaBlend wie im Photoshop
Du hast die Antwort bereits selbst geschrieben.xperience2003 hat geschrieben:..und wie kommst du dabei auf photoshop?AlphaBlend wie im Photoshop
ich mein da gibts darken, lighten, screen, multiply und so weiter
ganz zu schweigen von masken und stufenweisen blenden