Bild-Verschmierer

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Kabelbinder

Sieger des WM-Contest 2006

Betreff: Bild-Verschmierer

BeitragFr, Okt 22, 2004 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Versuch, ein Programm zu schreiben, mit dem man einen Anti-Alias-Effect erzielen kann ist bei mir nur ein Programm, das Bilder verschmieren kann herausgekommen. Es eignet sich vielleicht ganz gut für Hintergrundbilder und ähnliches. Und dankt WritepixelFast läuft es auch schnell genug (mit plot hatte es noch über 20 Sekunden gedauert, mit WritePixelFast etwa eine Sekunde). Ich habe mal eine Function daraus gemacht, mit der könnt ihr aus einfach rects, auf dem Bildschirm schon ein ganz nettes multicolor-Bild erstellen:

BlitzBasic: [AUSKLAPPEN]
Function verschmieren()
LockBuffer
For i = 1 To 639
wert = ReadPixelFast(i,0)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 1 To 479
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i,j+1,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

For i = 1 To 639
wert = ReadPixelFast(i,480)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 479 To 1 Step -1
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i,j-1,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

For i = 1 To 639
If i<=479 Then wert = ReadPixelFast(0,i)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 1 To 479
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i+1,j,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

For i = 1 To 639
If i<=479 Then wert = ReadPixelFast(640,i)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 479 To 1 Step -1
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i-1,j,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

UnlockBuffer
End Function


hier mal ein einfaches Beispiel nur mit Rot und grün:
BlitzBasic: [AUSKLAPPEN]
AppTitle \"Anti Verschleiß\"
Graphics 640,480,16,2
SeedRnd MilliSecs()

Local nr,ng,nb
Local ar,ag,ab

kanten = CreateImage(640,480)
SetBuffer ImageBuffer(kanten)
Color 255,0,0
Rect 0,0,640,480
Color 0,160,0
For i = 0 To 640 Step 5
Rect i,0,5,Rand(10,470)
Next

weich = CreateImage(640,480)
SetBuffer ImageBuffer(weich)
Cls

Function verschmieren()
LockBuffer
For i = 1 To 639
wert = ReadPixelFast(i,0)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 1 To 479
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i,j+1,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

For i = 1 To 639
wert = ReadPixelFast(i,480)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 479 To 1 Step -1
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i,j-1,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

For i = 1 To 639
If i<=479 Then wert = ReadPixelFast(0,i)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 1 To 479
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i+1,j,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

For i = 1 To 639
If i<=479 Then wert = ReadPixelFast(640,i)
ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)
For j = 479 To 1 Step -1
wert = ReadPixelFast(i,j)
nr = (wert And $FF0000)/$10000
ng = (wert And $FF00)/$100
nb = (wert And $FF)

If nr <> ar Or ng <> ag Or nb <> ab Then
Color (nr+ar)/2,(ng+ag)/2,(nb+ab)/2
wert = $FF000000+ColorRed()*$10000+ColorGreen()*$100+ColorBlue()
WritePixelFast i-1,j,wert
EndIf

ar = (wert And $FF0000)/$10000
ag = (wert And $FF00)/$100
ab = (wert And $FF)

Next
Next

UnlockBuffer
End Function

DrawImage kanten,0,0

verschmieren()

SetBuffer BackBuffer()
Repeat

DrawImage weich,0,0

Flip
Cls
Until KeyHit(1)
End


Das schöne ist, die Bilder werden immer anders!
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group