Spiegeleffekt für Bilder - mirrorImage()

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Justus

Betreff: Spiegeleffekt für Bilder - mirrorImage()

BeitragSa, März 17, 2007 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Funktion liefert ein Bild zurück, das vertikal gespiegelt und mit einem Transparenzverlauf versehen wurde, sodass der Eindruck einer Spiegelung entsteht.

Code: [AUSKLAPPEN]
Function mirrorImage:TImage(img:TImage)
   Local a:Int
   Local r:Int
   Local g:Int
   Local b:Int
   Local i:Int
   Local j:Int
   Local argb:Int
   Local pixmap:TPixmap = LockImage(img)
   pixmap = ConvertPixmap(pixmap,PF_RGBA8888)
   pixmap = YFlipPixmap(pixmap)
   For i = 0 To PixmapWidth(pixmap)-1
      For j = 0 To PixmapHeight(pixmap)-1
         argb = ReadPixel(pixmap,i,j)
         a:Int = Int(76.0*(1.0-((Float(j)/Float(ImageHeight(img))))))
         If (argb Shr 24) = 0 Then a = 0
         r:Int = (argb Shr 16) & $ff
           g:Int = (argb Shr 8)  & $ff
           b:Int = argb & $ff
         argb = a*$1000000 + r*$10000 + g*$100 + b
         WritePixel pixmap,i,j,argb
      Next
   Next
   Return LoadImage(pixmap)
EndFunction


Wie schwach bzw. intensiv die Spiegelung ist, kann man einstellen, indem man die Variable maxAlpha in einem Wertebereich von 0.0 bis 255.0 ändert.

Beispiel:
user posted image
  • Zuletzt bearbeitet von Justus am Sa, März 17, 2007 20:14, insgesamt 3-mal bearbeitet

Blitzcoder

Newsposter

BeitragSa, März 17, 2007 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hihi, iTunes lässt grüssen Wink

Sieht aber nett aus.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

Freeman

BeitragSa, März 17, 2007 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
schaut interessant aus, habe leider im moment meinen laptop nicht hier um es zu testen. Aber wie schnell läuft diese Funktion, kann mal jemand nen paar werte liefern.

Fr3eMaN
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Justus

BeitragSa, März 17, 2007 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
400x300, 100 Durchläufe:
Dauer insgesamt: 12080 ms
Durchschnitt: 120 ms

1024x768, 50 Durchläufe:
Dauer insgesamt: 43950 ms
Durchschnitt: 879 ms

Also alles andere als realtimegeeignet Wink

Schnittlauch

Unkraut

BeitragSa, März 17, 2007 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum berechnest du das Bild auch immer wieder neu?
Einmal vorberechnen sollte doch reichen oder?
Ich wars nicht.

Justus

BeitragSa, März 17, 2007 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist völlig richtig, Schnittlauch. Irgendetwas anderes hat ja auch niemand behauptet. LoadImage benutzt man ja auch nicht im Mainloop.

Jan_

Ehemaliger Admin

BeitragSo, März 18, 2007 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde

Code: [AUSKLAPPEN]
Graphics 640 , 480 , 0 , 0
Local img:timage = LoadImage("bmax120.png")
Repeat
   Cls
   
   SetScale(1 , 1)
   DrawImage(img,0,0)
   SetScale(1 , - 1)
   DrawImage(img,0,400)
   
   Flip
Until KeyHit(key_escape)


das machen + einen 2. kanal drüber legen.
dann müsste ich es auch nciht vorberechen.
für was haben wir denn ne 3D Lib, für 2d darstellung.
between angels and insects

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group