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) |