Seite 1 von 1

2 Bilder "überlagern" (wie bei GIMP)

Verfasst: 09.11.2012 11:12
von Sunny
Gibt es eine Möglichkeit in PB ein Bild so auf ein anderes Bild zu legen, dass dabei der selbe Effekt erzielt wird, wie wenn man beim Programm THE GIMP eine Ebene über eine andere legt und diese dann auf "Überlagern stellt" ohne die Werte jedes Pixels durchrechnen zu müssen? Wenn nicht, weiß vieleicht jemand, welcher Algorythmus dafür verwendet wird?

Re: 2 Bilder "überlagern" (wie bei GIMP)

Verfasst: 09.11.2012 15:21
von bobobo
DrawAlphaImage() könnte der Sache nahe kommen.
(wenn auch nicht ganz)

Re: 2 Bilder "überlagern" (wie bei GIMP)

Verfasst: 09.11.2012 16:06
von bobobo
hab da was gefunden (engl-Forum)
http://www.purebasic.fr/english/viewtop ... erCallback
allerdings mit pixelrechnerei

Code: Alles auswählen

Enumeration
  #w
  #c
  #i1
  #i2
  #i3
EndEnumeration

Macro overlay(color_source,color_targ, colo)
  If  color_source <128
    colo = ( 2 * color_source*color_targ ) / 255
  Else
    colo =255 - ( 2 * ( 255 - color_source ) * ( 255 - color_targ  ) / 255 )
  EndIf
EndMacro

Procedure FilterCallback(x, y, Quell, Ziel)
  overlay(Red(Ziel),Red(Quell), red)
  overlay(Blue(Ziel),Blue(Quell), blue)
  overlay(Green(Ziel),Green(Quell), green)
  ProcedureReturn RGBA(red, green, blue, Alpha(Ziel))
EndProcedure

UseJPEGImageDecoder()
LoadImage(#i1,"01000000.jpg") ; Bild hinten
LoadImage(#i2,"02000000.jpg") ; Bild 1
LoadImage(#i3,"03000000.jpg") ; Bild 2
OpenWindow(#w,0,0,500,500,"Fenster",#PB_Window_ScreenCentered|#PB_Window_ScreenCentered)
CanvasGadget(#c,0,0,500,500)

StartDrawing(CanvasOutput(#c))
  DrawImage(ImageID(#i1),0,0) ;Bild hinten
  DrawingMode(#PB_2DDrawing_CustomFilter) 
  CustomFilterCallback(@FilterCallback())
  DrawImage(ImageID(#i2),0,0) ;Bild 1 reinmixen
  DrawImage(ImageID(#i3),0,0) ;Bild 2 reinmixen
StopDrawing()

FreeImage(#i1)
FreeImage(#i2)
FreeImage(#i3)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow