Filter - Funktionen von ???
Hi,

ich hab hier ne kleine rountine geschrieben, mit der man beliebige filter zum laufen bekommen kann.
einfach sich die kommentare bei den Data - Feldern unten angucken...
somit lassen sich viele filter umsetzen.
3 filter hab ich gleich mitgeliefert ... einen Bilinear-Filter, nen Weichzeichnen - Effekt und ein Beispiel für nen Beliebigen effekt.

um die verschiedenen filter einzusetzen muss man in der routine in der zeile "Restore Filter_0x" für das x die Zahl des Filters eingeben.

hier der code:

[code:1:1c86bf0d84]
Graphics 640,480,16,2

Dim FilterData% (0,0,2)

Image = LoadImage ("Image.Bmp")
DrawImage Image,0,0

FilterStart% = MilliSecs ()
FilterImage Image
FilterEnde% = MilliSecs ()
Print FilterEnde% - FilterStart%

DrawImage Image,0,200

WaitKey ()
End

; --- Die Funktionen

Function FilterImage% (hImage%)

ReadImage (hImage%)

TempBuffer% = GraphicsBuffer ()
TempColor_Red% = ColorRed ()
TempColor_Green% = ColorGreen ()
TempColor_Blue% = ColorBlue ()

ImgWidth% = ImageWidth (hImage%)
ImgHeight% = ImageHeight (hImage%)

SetBuffer ImageBuffer (hImage%)

For TempY% = 0 To ImgHeight% - 1
For TempX% = 0 To ImgWidth% - 1
CR% = 0
CG% = 0
CB% = 0
Restore FilterType_03
Read AnzahlPunkte
For TempZ% = 1 To AnzahlPunkte
Read AbsX%,AbsY%
If (TempX% + AbsX%) => 0 And (TempX% + AbsX%) <= (ImgWidth% - 1)
If (TempY% + AbsY%) => 0 And (TempY% + AbsY%) <= (ImgHeight% - 1)
CR% = CR% + FilterData% ((TempX% + AbsX%),(TempY% + AbsY%),0)
CG% = CG% + FilterData% ((TempX% + AbsX%),(TempY% + AbsY%),1)
CB% = CB% + FilterData% ((TempX% + AbsX%),(TempY% + AbsY%),2)
End If
End If
Next
Read Divisor%
Read Offset%
CR% = ((CR% / Divisor%) + Offset%)
CG% = ((CG% / Divisor%) + Offset%)
CB% = ((CB% / Divisor%) + Offset%)
Color CR%,CG%,CB%
Plot TempX%,TempY%
Next
Next

SetBuffer TempBuffer%
Color TempColor_Red%,TempColor_Green%,TempColor_Blue%

Dim FilterData% (0,0,2)

Return hImage%

End Function



Function ReadImage% (hImage%)

TempBuffer% = GraphicsBuffer ()
TempColor_Red% = ColorRed ()
TempColor_Green% = ColorGreen ()
TempColor_Blue% = ColorBlue ()

ImgWidth% = ImageWidth (hImage%)
ImgHeight% = ImageHeight (hImage%)
Dim FilterData% (ImgWidth% - 1,ImgHeight% - 1,2)

SetBuffer ImageBuffer (hImage%)

For TempY% = 0 To ImgHeight% - 1
For TempX% = 0 To ImgWidth% - 1
GetColor (TempX%,TempY%)
FilterData% (TempX%,TempY%,0) = ColorRed ()
FilterData% (TempX%,TempY%,1) = ColorGreen ()
FilterData% (TempX%,TempY%,2) = ColorBlue ()
Next
Next

SetBuffer TempBuffer%
Color TempColor_Red%,TempColor_Green%,TempColor_Blue%

End Function

.FilterType_01 ; normaler Bilinear - Filter
Data 5 ; Anzahl Bildpunkte
Data + 0,+ 0 ;
Data + 1,+ 0 ;
Data - 1,+ 0 ; Die Koordinaten der einzelnen Bildpunkte
Data + 0,+ 1 ;
Data + 0,- 1 ;
Data 5 ; Divisor - normalerweise gleich der Anzahl Bildpunkte
Data 0 ; Dieser Wert wird jedem Farbpunkt hinzuaddiert - normal gleich 0

.FilterType_02 ; Weichzeichnen - Effekt
Data 9
Data + 0,+ 0
Data - 1,- 1
Data + 0,- 1
Data + 1,- 1
Data + 1,+ 0
Data + 1,+ 1
Data + 0,+ 1
Data - 1,+ 1
Data - 1,+ 0
Data 9
Data 0

.FilterType_03 ; experimenteller Filter
Data 3
Data + 0,+ 0
Data - 1,+ 0
Data - 2,+ 0
Data 8
Data 16
[/code:1:1c86bf0d84]

zur zeit ist der experimentelle filter aktivert.

cu
===
von ???
hi,

hab das ganze nochmals überarbeitet.
jetzt wird maskcolor unterstützt und man muss immer VOR dem ausführen der funktion das restore ausführen.
somit ist es möglich die EINE funktion zu nutzen, aber alle filter zu nutzen.

hier der neue code

[code:1:9de25ee688]
Graphics 640,480,16,2

Dim FilterData% (0,0,2)

Image = LoadImage ("Image.Bmp")
DrawImage Image,0,0

FilterStart% = MilliSecs ()
FilterImage Image
FilterEnde% = MilliSecs ()
Print FilterEnde% - FilterStart%

DrawImage Image,0,200

WaitKey ()
End

; --- Die Funktionen

Function FilterImage% (hImage%)

ReadImage (hImage%)

TempBuffer% = GraphicsBuffer ()
TempColor_Red% = ColorRed ()
TempColor_Green% = ColorGreen ()
TempColor_Blue% = ColorBlue ()

ImgWidth% = ImageWidth (hImage%)
ImgHeight% = ImageHeight (hImage%)

SetBuffer ImageBuffer (hImage%)

For TempY% = 0 To ImgHeight% - 1
For TempX% = 0 To ImgWidth% - 1
CR% = 0
CG% = 0
CB% = 0
Restore FilterType_03
Read AnzahlPunkte
For TempZ% = 1 To AnzahlPunkte
Read AbsX%,AbsY%
If (TempX% + AbsX%) => 0 And (TempX% + AbsX%) <= (ImgWidth% - 1)
If (TempY% + AbsY%) => 0 And (TempY% + AbsY%) <= (ImgHeight% - 1)
CR% = CR% + FilterData% ((TempX% + AbsX%),(TempY% + AbsY%),0)
CG% = CG% + FilterData% ((TempX% + AbsX%),(TempY% + AbsY%),1)
CB% = CB% + FilterData% ((TempX% + AbsX%),(TempY% + AbsY%),2)
End If
End If
Next
Read Divisor%
Read Offset%
CR% = ((CR% / Divisor%) + Offset%)
CG% = ((CG% / Divisor%) + Offset%)
CB% = ((CB% / Divisor%) + Offset%)
Color CR%,CG%,CB%
Plot TempX%,TempY%
Next
Next

SetBuffer TempBuffer%
Color TempColor_Red%,TempColor_Green%,TempColor_Blue%

Dim FilterData% (0,0,2)

Return hImage%

End Function



Function ReadImage% (hImage%)

TempBuffer% = GraphicsBuffer ()
TempColor_Red% = ColorRed ()
TempColor_Green% = ColorGreen ()
TempColor_Blue% = ColorBlue ()

ImgWidth% = ImageWidth (hImage%)
ImgHeight% = ImageHeight (hImage%)
Dim FilterData% (ImgWidth% - 1,ImgHeight% - 1,2)

SetBuffer ImageBuffer (hImage%)

For TempY% = 0 To ImgHeight% - 1
For TempX% = 0 To ImgWidth% - 1
GetColor (TempX%,TempY%)
FilterData% (TempX%,TempY%,0) = ColorRed ()
FilterData% (TempX%,TempY%,1) = ColorGreen ()
FilterData% (TempX%,TempY%,2) = ColorBlue ()
Next
Next

SetBuffer TempBuffer%
Color TempColor_Red%,TempColor_Green%,TempColor_Blue%

End Function

.FilterType_01 ; normaler Bilinear - Filter
Data 5 ; Anzahl Bildpunkte
Data + 0,+ 0 ;
Data + 1,+ 0 ;
Data - 1,+ 0 ; Die Koordinaten der einzelnen Bildpunkte
Data + 0,+ 1 ;
Data + 0,- 1 ;
Data 5 ; Divisor - normalerweise gleich der Anzahl Bildpunkte
Data 0 ; Dieser Wert wird jedem Farbpunkt hinzuaddiert - normal gleich 0

.FilterType_02 ; Weichzeichnen - Effekt
Data 9
Data + 0,+ 0
Data - 1,- 1
Data + 0,- 1
Data + 1,- 1
Data + 1,+ 0
Data + 1,+ 1
Data + 0,+ 1
Data - 1,+ 1
Data - 1,+ 0
Data 9
Data 0

.FilterType_03 ; experimenteller Filter
Data 3
Data + 0,+ 0
Data - 1,+ 0
Data - 2,+ 0
Data 8
Data 16
[/code:1:9de25ee688]

cu



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