Blureffekt von ???
Folgender Code verwischt ein Bild.
Es ist nicht unbedingt für Realtime-effekte zu gebrauchen - Bildschirmfüllende Bilder brauchen bei mir shconmal 1 sekunde.
Bei kleineren (bis 100x100 ca) ist es aber auch für Realtime noch ausreichend schnell.

Wenn man es oft anwendet, bildet sich leider ein kleiner Pixelfehler..

[code:1:5d9ba42e07]
;Blureffekt durch Bilinearen Filter
;Abtastmuster von 9 Pixeln um Ursprungspixel -> Durchschnitt -> malen
;2003, by Triton
Graphics 640,480,32,1
SetBuffer BackBuffer()

Global pic = LoadImage("bbchvubanner.bmp")

While Not KeyDown(1)
If MouseDown(1) Then blur pic
DrawBlock pic, 0,0
Color 0,0,0
Text 0,0, "Maustaste für Blureffekt"
Color 255,255,255
Text 1,1, "Maustaste für Blureffekt"

Flip
Cls
Wend


;*************************************************************
Function blur(pic)
SetBuffer ImageBuffer(pic)
LockBuffer ImageBuffer(pic)

For x = 0 To ImageWidth(pic)-1
For y = 0 To ImageHeight(pic)-1
rgb1 = ReadPixelFast(x,y) ;Mitte
rgb2 = ReadPixelFast(x+1,y) ;Rechts
rgb3 = ReadPixelFast(x,y+1) ;Unten
rgb3 = ReadPixelFast(x+1,y+1) ;Unten-Rechts
rgb5 = ReadPixelFast(x-1,y) ;Links
rgb6 = ReadPixelFast(x,y-1) ;Oben
rgb7 = ReadPixelFast(x-1,y-1) ;Oben-Links
rgb8 = ReadPixelFast(x+1,y-1) ;Oben-Rechts
rgb9 = ReadPixelFast(x-1,y+1) ;Unten-Links

r1=(rgb1 And $FF0000)/$10000
g1=(rgb1 And $FF00)/$100
b1=rgb1 And $FF
r2=(rgb2 And $FF0000)/$10000
g2=(rgb2 And $FF00)/$100
b2=rgb2 And $FF
r3=(rgb3 And $FF0000)/$10000
g3=(rgb3 And $FF00)/$100
b3=rgb3 And $FF
r4=(rgb3 And $FF0000)/$10000
g4=(rgb3 And $FF00)/$100
b4=rgb3 And $FF
r5=(rgb5 And $FF0000)/$10000
g5=(rgb5 And $FF00)/$100
b5=rgb5 And $FF
r6=(rgb6 And $FF0000)/$10000
g6=(rgb6 And $FF00)/$100
b6=rgb6 And $FF
r7=(rgb7 And $FF0000)/$10000
g7=(rgb7 And $FF00)/$100
b7=rgb7 And $FF
r8=(rgb8 And $FF0000)/$10000
g8=(rgb8 And $FF00)/$100
b8=rgb8 And $FF
r9=(rgb9 And $FF0000)/$10000
g9=(rgb9 And $FF00)/$100
b9=rgb9 And $FF


rneu#=(r1+r2+r3+r4+r5+r6+r7+r8+r9)/9
gneu#=(g1+g2+g3+g4+g5+g6+g7+g8+g9)/9
bneu#=(b1+b2+b3+b4+b5+b6+b7+b8+b9)/9
rgbneu#=255*$1000000 + rneu#*$10000 + gneu#*$100 + bneu#

WritePixelFast x,y,rgbneu
Next
Next

UnlockBuffer ImageBuffer(pic)
SetBuffer BackBuffer()
End Function
[/code:1:5d9ba42e07]
===
von ???
ich traue mich diesmal gar nicht auszuprobieren *g*
===
von ???
Hi!
Das ganze würde viel schneller sein, wenn Du das Bild einmal in
ein Array einliest, und danach das Array an WritePixelFast
übergeben würdest, denn es werden ja glaube ich alle Pixel
5 mal unnötig mit ReadPixelFast eingelesen. Sonst dachte ich eigentlich,
das wir schonmal ein Blurcode im Codearchiv hatten.
mfg olli
===
von ???
[quote:d67467a588]ich traue mich diesmal gar nicht auszuprobieren *g*[/quote:d67467a588]
genauso absturzsicher wie alle meine anderen codes ;)

Mich wundert es sowieso immernoch warum du beim Resize probleme hattest - bei mir läuft ein 400x300 bild konstant mit 40 fps..

[quote:d67467a588]
Das ganze würde viel schneller sein, wenn Du das Bild einmal in
ein Array einliest, und danach das Array an WritePixelFast
übergeben würdest, denn es werden ja glaube ich alle Pixel
5 mal unnötig mit ReadPixelFast eingelesen. Sonst dachte ich eigentlich,
das wir schonmal ein Blurcode im Codearchiv hatten.
[/quote:d67467a588]

Ja, hatten wir, sogar von dir ;)
Allerdings habe ich einen neuen geschrieben weil deiner nicht das ganze bild verwischt und irgentwie trotzdem lahm ist..

Hast recht, jetzt wo du es sagt, eigebtlich müsste man jedesmal nur 5 Pixel neueinlesen, mal sehen, ob ich das noch optimieren kann.
===
von ???
[quote:26a2ab9095="Freax"]Hi!
Das ganze würde viel schneller sein, wenn Du das Bild einmal in
ein Array einliest, und danach das Array an WritePixelFast
übergeben würdest, denn es werden ja glaube ich alle Pixel
5 mal unnötig mit ReadPixelFast eingelesen. Sonst dachte ich eigentlich,
das wir schonmal ein Blurcode im Codearchiv hatten.
mfg olli[/quote:26a2ab9095]

Das simmt nicht... ReadPixelFast und WritePixelFast sind schneller als wen man das ganze in ein Array einliest und bearbeitet...
===
von ???
[quote:d8eb34216a]
Das simmt nicht... ReadPixelFast und WritePixelFast sind schneller als wen man das ganze in ein Array einliest und bearbeitet...
[/quote:d8eb34216a]
ich will beweise :)
===
von ???
Einfach mal Probieren... Hatte ich nähmlich auch schon bei meinem 3D-SoundWave Tool gesehn...

1. das einlesen der Daten in den Speicher
2. die Verarbeitung dürfte etwa gleich schnell sein
3. und das zurück Schreiben der Daten in den Grafikspeicher...

Das sind eindeutig 2 Arbeitsschritte zu viel (Nr. 1+3)



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