Italia
Fonte/ Codesnippets

Weichzeichnen, Filter, Box-Blur

 

Sven
Bader
Hier habe ich einen Code per einen Weichzeichen-Filter, aus Performance-Stabilire eher per kleine Grafiken geeignet.



Über den dritten Parameter der Blur-Funktion lässt sich steuern, wie oft der Filter angewendet wird.
Proc Blur

    Parameters width&, height&, passes&
    Declare avg_red&, avg_green&, avg_blue&, new_image&[width&-1, height&-1, 2]
    Declare count&, box&, x&, y&, i&, j&

    whileLoop passes&

        box& = 1

        WhileLoop 0, width& - 1

            i& = &loop

            WhileLoop 0, height& - 1

                j& = &loop
                clear avg_red&, avg_blue&, avg_green&, count&

                WhileLoop (i& - box&), (i& + box&)

                    x& = &loop
                    Case (x& = width&)  : Break
                    Case (x& < 0) : Continue

                    WhileLoop (j& - box&), (j& + box&)

                        y& = &loop
                        case (y& = height&) : Break
                        case (y& < 0) : Continue
                        inc count&
                        avg_red&   = avg_red&   + image&[x&, y&, 0]
                        avg_green& = avg_green& + image&[x&, y&, 1]
                        avg_blue&  = avg_blue&  + image&[x&, y&, 2]

                    EndWhile

                EndWhile

                new_image&[i&, j&, 0] = avg_red&   / count&
                new_image&[i&, j&, 1] = avg_green& / count&
                new_image&[i&, j&, 2] = avg_blue&  / count&

            EndWhile

        EndWhile

        MAT image&[] = new_image&[]

    EndWhile

EndProc

Cls
Declare x&, y&, px&, width&, height&
'===================== Bild in Array einlesen
DrawIcon "EIS", 50, 50
width& = 32
height& = 32
Declare image&[width&-1, height&-1, 2]

WhileLoop 0, height& - 1

    y& = &loop

    WhileLoop 0, width& - 1

        x& = &loop
        px& = GetPixel(50 + x&, 50 + y&)
        image&[x&, y&, 0] = GetRValue(px&)
        image&[x&, y&, 1] = GetGValue(px&)
        image&[x&, y&, 2] = GetBValue(px&)

    EndWhile

EndWhile

'===================== Filter anwenden
Blur(width&, height&, 5)
'===================== geglättetes Bild Mostra

WhileLoop 0, height& - 1

    y& = &loop

    WhileLoop 0, width& - 1

        x& = &loop
        SetPixel 100 + x&, y& + 50, RGB(image&[x&, y&, 0], image&[x&, y&, 1], image&[x&, y&, 2])

    EndWhile

EndWhile

WaitKey
End

Der Flaschenhals ist hier nicht einmal der Filter selbst (wobei der auch) sondern das GetPixel und SetPixel. Umgehen potuto man das zum Beispiel circa eine 24-Bit-Bitmap-File, die man als Block einliest.

Ein qualitativer Tweak wäre, die Funktion nur einen Teilbereich glätten zu lassen, die Ränder aber trotzdem im Array vorzuhalten. Dann würden die Randbereiche nicht so abgehackt aussehen. Hierzu müsste man dann die 4 Case-Abfragen entfernen und den x/y-Offset als Parameter mitgeben.

Viel Divertimento beim Glätten

23 kB
Hochgeladen:16.11.2021
Downloadcounter77
Download
 
16.11.2021  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

1.534 Views

Untitledvor 0 min.
Sven Bader22.12.2022
Ernst29.05.2022
ByteAttack20.05.2022
Michael W.30.03.2022
Di più...

Themeninformationen

Dieses Thema hat 1 subscriber:

Sven Bader (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie