Blending ohne DirectX???

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Blending ohne DirectX???

Beitrag von Xaby »

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

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
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Wo wir gerade beim Thema sind, für Windows gibt es doch auch die SDL, weiß einer, wie es da mit dem Blenden aussieht? Wie die Befehle vielleicht in C++ heißen?
Und eines frage ich mich schon lange: Unter Linux und MacOSX können PNGs benutzt werden, bei Windows ICONs. Weshalb kann ich auch transparente PNGs in Menüs benutzen, ist da ein Fehler in der Hilfe, oder ist das so komisch? Dadurch verliert PureBasic etwas an Portierbarkeit, wenn ich das umschreiben müsste. Aber die Antworten zu meinem oberen Eintrag sind mir erst einmal wichtiger.

Noch mals, Danke im Voraus für eure Bemühungen, ich bin auf eure Hilfe angewiesen.
Gruß, Folker. (Schon meine Bilder gesehen auf meiner Seite?)
Kinder an die Macht http://scratch.mit.edu/
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

für Windows gibt es doch auch die SDL, weiß einer, wie es da mit dem Blenden aussieht?
SDL unter Windows benutzt DirectX.
Zu Lösung deines Problems kann ich leider nicht beitragen.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
Antworten