Blending ohne DirectX???
Verfasst: 17.12.2005 02:09
Hallo Leute,
Fragt mich bitte nicht, wozu ich das brauche, ich muss es einfach haben!
Ich benötige eine Möglichkeit, ohne DirectX, also ohne Sprites, ein Blending zu machen. Das jedoch schneller ist als der nachstehende Code. Meine Vermutung ist, dass es mit Speicherzugriffen möglich ist. Es ist ja eigentlich immer das gleiche für jeden Pixel.
Ihr braucht nur zwei *.JPGs in dem *.EXE ordner und die müssen dann Bild1 und Bild2 heißen oder ihr nennt sie um.
Meine Frage lautet also, wie bekomme ich das gleiche, nur schneller?
Herausforderung! KEIN DIRECTX!
Cool wäre auch, wenn ich trotz der NEUEN schnellen Version immer noch jeden Punkt einzeln ansprechen könnte
Danke, für eure Unterstützung
Fragt mich bitte nicht, wozu ich das brauche, ich muss es einfach haben!
Ich benötige eine Möglichkeit, ohne DirectX, also ohne Sprites, ein Blending zu machen. Das jedoch schneller ist als der nachstehende Code. Meine Vermutung ist, dass es mit Speicherzugriffen möglich ist. Es ist ja eigentlich immer das gleiche für jeden Pixel.
Ihr braucht nur zwei *.JPGs in dem *.EXE ordner und die müssen dann Bild1 und Bild2 heißen oder ihr nennt sie um.
Meine Frage lautet also, wie bekomme ich das gleiche, nur schneller?
Herausforderung! KEIN DIRECTX!
Cool wäre auch, wenn ich trotz der NEUEN schnellen Version immer noch jeden Punkt einzeln ansprechen könnte
Danke, für eure Unterstützung
Code: Alles auswählen
UseJPEGImageDecoder()
LoadImage(1,"bild1.jpg")
LoadImage(2,"bild2.jpg")
Global Alpha.l
Global Richtung.l
Global Verhalten.l
Dim Bild1.l(640,480)
Dim Bild2.l(640,480)
Procedure.l MachEffekt()
UseImage(1)
StartDrawing(ImageOutput())
For ii=0 To 479
For i=0 To 639
Bild1(i,ii)=Point(i,ii)
Debug Bild1 (i,ii)
Next
Next
StopDrawing()
UseImage(2)
StartDrawing(ImageOutput())
For ii=0 To 479
For i=0 To 639
Bild2(i,ii)=Point(i,ii)
Debug Bild2(i,ii)
Next
Next
StopDrawing()
EndProcedure
Procedure.l Farbe(i.l,ii.l)
Rot.l
Grun.l
Blau.l
Rot =(Red(Bild1(i,ii))*(Verhalten-Alpha)+Red(Bild2(i,ii))*(Alpha))/Verhalten
Grun=(Green(Bild1(i,ii))*(Verhalten-Alpha)+Green(Bild2(i,ii))*(Alpha))/Verhalten
Blau=(Blue(Bild1(i,ii))*(Verhalten-Alpha)+Blue(Bild2(i,ii))*(Alpha))/Verhalten
ProcedureReturn RGB(Rot,Grun,Blau)
EndProcedure
Procedure MachBild()
i.l
ii.l
UseImage(0)
StartDrawing(ImageOutput())
For ii=0 To 479
For i=0 To 639
Plot(i,ii,Farbe(i,ii))
Next
Next
StopDrawing()
EndProcedure
Procedure Zeichne()
StartDrawing(WindowOutput())
DrawImage(UseImage(0),10,100)
StopDrawing()
EndProcedure
If OpenWindow(0,0,0,660,660,#PB_Window_ScreenCentered | #PB_Window_SystemMenu,"(c) Folker Linstedt 2005, Erschaffen am 16.12.2005: . . . . FLEffekte . . . . V.0.0.2 PreAlpha >> Blending")
CreateImage( 0,640,480);
UseImage(0)
StartDrawing(ImageOutput())
DrawImage(UseImage(1),0,0,640,480)
StopDrawing()
Zeichne()
MachEffekt()
Alpha=0
Richtung=10
Verhalten=100
Repeat
Event=WindowEvent()
MachBild()
Zeichne()
Delay(10)
Alpha+Richtung
If Alpha>Verhalten: Alpha=Verhalten: Richtung*-1: EndIf
If Alpha<0 : Alpha= 0: Richtung*-1: EndIf
Until Event=#PB_Event_CloseWindow
EndIf