Dotfilter

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Xenon

Betreff: Dotfilter

BeitragSa, Jul 24, 2004 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hab mal ein so ein gepunktetes Bild gesehen und mich dazu entschlossen einen Algo zu schreiben der das auch mit einem normalen Bild macht und ich poste hier, was rausgekommen ist. Zum probieren einfach oben ein vorhandenes Bild angeben. Das beste Resultat sieht man dann in der durch das Progg erstellten Datei names BigTest.bmp.

Durch Oval is der Algo nat. nicht sonderlich schnell, aber er ist ja auch nicht für RealTime gedacht Wink

BlitzBasic: [AUSKLAPPEN]
Const imagename$ = "face.jpg"

Graphics 1024, 768, 32, 1

image = LoadImage(imagename$)
MaskImage image, 255, 255, 0

image2 = CopyImage(image)
MaskImage image2, 255, 255, 0

BlackImage(image2)

image3 = CopyImage(image2)
MaskImage image3, 255, 255, 0

AbgleicheImage(image3)

image4 = DotImg(image3, 5)
MaskImage image4, 255, 255, 0

image5 = ScaleDotImage(image3, 5)
SaveImage(image5, "BigTest.bmp")

SetBuffer BackBuffer()

ClsColor 0, 0, 255

w = ImageWidth(image)
h = ImageHeight(image)

Repeat
Cls
DrawImage image, 0, 0
DrawImage image2, w, 0
DrawImage image3, 0, h
DrawImage image4, w, h
Flip
Until KeyDown(1)
End

Function AbgleicheImage(img)
low = 255
high = 0
SetBuffer ImageBuffer(img)
LockBuffer
w = ImageWidth(img)-1
h = ImageHeight(img)-1
For i=0 To w
For j=0 To h
b = ReadPixelFast(i, j) And $FF
If b < low Then low = b
If b > high Then high = b
Next
Next


high = high - low

If high = 0 Then Return 0
For i=0 To w
For j=0 To h
b = (ReadPixelFast(i, j) And $FF) - low
b = (b/Float(high)) * 255.0
WritePixelFast i, j, $FF000000 Or b Or (b Shl 8) Or (b Shl 16)
Next
Next

UnlockBuffer
End Function

Function DotImg(img, ds, r=255, g=0, b=0, br=0, bg=0, bb=0)
w = ImageWidth(img)
h = ImageHeight(img)
ds = ds-1
mx = Ceil(Float(w)/Float(ds))
my = Ceil(Float(h)/Float(ds))
rds = Ceil(Sqr(((ds/2.0)*(ds/2.0))*2.0))
fb = CreateImage(w, h)
LockBuffer(ImageBuffer(img))
SetBuffer ImageBuffer(fb)
Color r, g, b
ClsColor br, bg, bb
Cls
For i=0 To mx
For j=0 To my
v = 0
For x = 0 To ds
For y = 0 To ds
v = v + (ReadPixelFast(ds*i+x, ds*j+y, ImageBuffer(img)) And $FF)
Next
Next
v = v/((ds*ds))
v = v*(rds/255.0)
Oval i*ds + (ds/2) - v, j*ds + (ds/2) - v, 2*v, 2*v
Next
Next
UnlockBuffer ImageBuffer(img)
Return fb
End Function

Function BlackImage(img)
width = ImageWidth(img)-1
height = ImageHeight(img)-1
SetBuffer ImageBuffer(img)
LockBuffer
For i=0 To width
For j=0 To height
r = ReadPixelFast(i, j)
g = (r Shr 8) And $FF
b = r And $FF
r = (r Shr 16) And $FF
r = (r+g+b)/3
r = $FF000000 Or (r Shl 16) Or (r Shl 8) Or r
WritePixelFast i, j, r
Next
Next
UnlockBuffer
End Function

Function ScaleDotImage(img, ds, r=255, g=0, b=0, br=0, bg=0, bb=0)
w = ImageWidth(img)-1
h = ImageHeight(img)-1
fb = CreateImage((w+1)*ds, (h+1)*ds)
rds = Ceil(Sqr(((ds/2.0)*(ds/2.0))*2.0))
LockBuffer(ImageBuffer(img))
SetBuffer ImageBuffer(fb)
Color r, g, b
ClsColor br, bg, bb
Cls
For i=0 To w
For j=0 To h
v = ReadPixelFast(i, j, ImageBuffer(img)) And $FF
v = v*(rds/255.0)
Oval i*ds + (ds/2) - v, j*ds + (ds/2) - v, 2*v, 2*v
Next
Next
UnlockBuffer ImageBuffer(img)
Return fb
End Function


Mfg Xenon

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group