Stufenlose Größenänderung von Bildern - Realtime and Fast :) von Triton
Folgender Code kann Bilder stufenlos vergrößern und verkleinern und ist ziemlich schnell dabei :-)

Man brauch nur den Code kopieren, irgentein Bild angeben (nicht zu groß, am besten ist es bei 300x100 ca.) und kann dann mit linker Maustaste
das Bild größer werden lassen, mit rechter Maustaste kleiner und mit beiden wird angehalten.


[code:1:23f4846e49]
;Stufenlose Vergrößerung und Verkleinerung von Bildern
;3/4.11.2002 by Triton
;http://www.blitz-basic.ch.vu
;dieser Resize-Effekt kann Bilder nur Prozentual in der Größe ändern!
Graphics 640,480,16,1
SeedRnd MilliSecs()
Delay 1000
pic = LoadImage("hlboa.jpg")
aender# = 0.01 ;Größenänderung jedes Einzelbildes später (1 = +/- 100%)
groessex = ImageWidth(pic)
groessey = ImageHeight(pic)
Dim pixel#(groessex-1,groessey-1,1)
Dim pixel2#(groessex-1,groessey-1)

;*** Farben vom Ursprungsbild einlesen
SetBuffer ImageBuffer(pic)
LockBuffer ImageBuffer(pic)
DrawBlock pic,0,0
For scanx = 0 To ImageWidth(pic)-1
For scany = 0 To ImageHeight(pic)-1
pixel2#(scanx,scany) = ReadPixelFast(scanx,scany)
Next
Next
UnlockBuffer ImageBuffer(pic)

;pixel erstmal simpel mit x,y füllen, diese Koordinaten für die pixel werden dann später verändert
SetBuffer BackBuffer()
For x = 0 To groessex-1
For y = 0 To groessey-1
pixel#(x,y,0) = x
pixel#(x,y,1) = y
Next
Next

t=MilliSecs()
fps=999

While Not KeyDown(1)
If MouseDown(1) Then on = 1
If MouseDown(2) Then on = 0
If MouseDown(1) And MouseDown(2) Then on = 2
LockBuffer BackBuffer()

For x = 0 To groessex-1
For y = 0 To groessey-1
x2 = pixel#(x,y,0)
y2 = pixel#(x,y,1)
If x2 > 0 And x2 < GraphicsWidth() And y2 > 0 And y2 < GraphicsHeight() Then WritePixelFast x2,y2,pixel2#(x,y)
If on = 0 Then
pixel#(x,y,0) = pixel#(x,y,0)*(1-aender#) ;Faktor der X-Veränderung bei jeden Frame
pixel#(x,y,1) = pixel#(x,y,1)*(1-aender#) ;das gleiche mit Y
End If
If on = 1 Then
pixel#(x,y,0) = pixel#(x,y,0)*(aender#+1) ;nochmal das gleiche, jetzt wirds aber größer
pixel#(x,y,1) = pixel#(x,y,1)*(aender#+1)
End If
If on = 2 Then
pixel#(x,y,0) = pixel#(x,y,0)*1 ;x1, d.h keine Größenänderung
pixel#(x,y,1) = pixel#(x,y,1)*1
End If
Next
Next
UnlockBuffer BackBuffer()
a=a+1
If MilliSecs()-t>1000 Then
fps = a
a = 0
t = MilliSecs()
End If
Color 255,255,255
ms# = 100/fps
Text 0,0,fps+" fps | "+ms#+" ms | "+ (pixel#(x,y,0) Mod pixel#(x+1,y+1,0))+" Size"

Flip
Cls
Wend

End[/code:1:23f4846e49]
===
von ???
Gefällt mir gut der Effekt.

Dirk Knoop
===
von ???
Bei mir legt sich bei der Vergößerung ein Gitter über das Bild, was nach und nach zu schwarzen Punkten wird. Das war wohl nicht im Sinne des Erfinders oder :(
===
von ???
Naja, schon, aber man kann ja mit Rects die Zwischenräume ausmalen lassen. Wenn die Größe des Bildes über 100% geht. Habs nur nicht machen wollen, weil sonst der Speed in die Knie geht.
===
BOA!!! von ???
Diese Funktion war so langsam, dass ich meinen Computer geresetet habe (weil das Bild nach 5 Minuter erst bei 50% skaliert war und ein Neustart viel schneller gewesen ist) - habe blöderweise ein großes Bild genommen...

Hier ECHTE Realtime-Skalierung:
http://www.blitzforum.de/viewtopic.php?p=15409#15409
===
von ???
@TheShadow & @Triton:
Ich weiß, dass ihr gerne darum kämpft besser zu sein, aber: Der BlitzBasic Wettbewerb hat immer noch nicht angefangen. 8)

MfG ShadowTurtle
===
von ???
sicher, dass du Debug aus hattest?? ;)

In der Regel ist es sehr schnell.

Ich muss mal ne optimierte Version schreiben... :evil: :wink:
===
von ???
weiß nicht mehr - musste ja Rechner Neustarten

Bei meiner Methode läuft es selbst im Debugmodus schnell...

vielleicht kannst du copypixelfast nehmen?



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: