Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Directional Blur
Aya - Fr 18.05.07 11:41
Titel: Directional Blur
Hi,
kennt jemand einen algorithmus für einen DirectionalBlur? Am besten noch einen schönen schnellen..
Hab schon gegoogled ohne ende, aber irgendwie nich wirklich fündig geworden :(
Im moment mach ich es über ConvolutionFilter, aber das ist ewig lahm...
Aya~
Phantom1 - Fr 18.05.07 13:54
Hab selbst noch keinen Directional Blurfilter geschrieben, aber evtl hab ich eine Idee.
Das Original-Bild mit gewünschten winkel drehen, anschließend nur horizonal bluren (sollte schnell gehen dank Scanline) und zum schluss wieder zurückdrehen.
mfg
Aya - Fr 18.05.07 14:00
Hi,
Phantom1 hat folgendes geschrieben: |
Hab selbst noch keinen Directional Blurfilter geschrieben, aber evtl hab ich eine Idee.
Das Original-Bild mit gewünschten winkel drehen, anschließend nur horizonal bluren (sollte schnell gehen dank Scanline) und zum schluss wieder zurückdrehen. |
das dürfte ziemlich miese qualität ergeben leider...
Ah und ich hab vergessen zu sagen, es muß möglichseit für jeden pixel eine andere blur-richtugn zu benutzen.
Aya~
Phantom1 - Fr 18.05.07 14:47
Mhhh, ich dachte Directional blurt nur in eine Richtung? Kannst du mal ein Beispiel-Bild zeigen (vorher/nacher) wie es aussehen soll?
mfg
Aya - Fr 18.05.07 15:03
Hi,
ein normaler directional blur blurrt normalerweise auch nur in eine richtung, ja.. aber ich möchte halt einen anderen directional blur für jedes pixel machen. Kannst es dir vorstellen wie einen RadialBlur, der ja auch kreisförmig blurrt..
Aya~
Marco D. - Fr 18.05.07 15:12
Wo finde ich Informationen über dieses Thema? Wikipedia kennt das nicht.
Chryzler - Fr 18.05.07 17:03
Du kannst ja jeden Pixel durchgehen und je nach der gewünschten Richtung blurren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TBlurType = (btVert, btHorz, btDiagL, btDiagR); var x, y: Integer; BlurTable: array of array of TBlurType; begin for y := 0 to Image1.Height - 1 do for x := 0 to Image1.Width - 1 do begin case BlurTable[x, y] of btVert: Image1.Picture.Bitmap.Canvas.Pixels[x, y] := MixColors(Image1.Picture.Bitmap.Canvas.Pixels[x, y - 1], Image1.Picture.Bitmap.Canvas.Pixels[x, y + 1]); btHorz: Image1.Picture.Bitmap.Canvas.Pixels[x, y] := MixColors(Image1.Picture.Bitmap.Canvas.Pixels[x - 1, y], Image1.Picture.Bitmap.Canvas.Pixels[x + 1, y]); btDiagL: Image1.Picture.Bitmap.Canvas.Pixels[x, y] := MixColors(Image1.Picture.Bitmap.Canvas.Pixels[x - 1, y - 1], Image1.Picture.Bitmap.Canvas.Pixels[x + 1, y + 1]); btDiagR: Image1.Picture.Bitmap.Canvas.Pixels[x, y] := MixColors(Image1.Picture.Bitmap.Canvas.Pixels[x + 1, y - 1], Image1.Picture.Bitmap.Canvas.Pixels[x - 1, y + 1]); end; end; end; |
Natürlich kannst du noch weitere Richtungen machen, zwischen vertikal und RDiagonal zum Beispiel.
F34r0fTh3D4rk - Fr 18.05.07 18:38
ich denke, aber dass bei Aya beliebige Richtungen möglich sein sollen, also bräuchte man dafür schon ne Formel ;)
mfg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!