2 Bilder "überlagern" (wie bei GIMP)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

2 Bilder "überlagern" (wie bei GIMP)

Beitrag 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?
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

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

Beitrag von bobobo »

DrawAlphaImage() könnte der Sache nahe kommen.
(wenn auch nicht ganz)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

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

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten