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] [EINKLAPPEN] 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] [EINKLAPPEN] 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!
|