Bleistiftzeichnung

Übersicht BlitzBasic Codearchiv

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Horst der Biber

Betreff: Bleistiftzeichnung

BeitragSo, Okt 16, 2005 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
mit dem ding kann man ein buntes bild aussehen lassen, als wär es mit nem bleistift gezeichnet.

da! code!
BlitzBasic: [AUSKLAPPEN]
AppTitle \"Bleistiftzeichnung\"

Graphics(800,600,32,2)

bild=LoadImage(\"bild.png\")
DrawBlock(bild,0,0)

For x=1 To ImageWidth(bild)
For y=1 To ImageHeight(bild)

GetColor x,y

rot=ColorRed()
gruen=ColorGreen()
blau=ColorBlue()

altefarbe=farbe

farbe=rot+gruen+blau+1
farbe=farbe/3
Color(255-Abs(farbe-altefarbe),255-Abs(farbe-altefarbe),255-Abs(farbe-altefarbe))

Plot(x,y)

Next
Next

WaitKey

End
 

CodeMaster

BeitragSo, Okt 16, 2005 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein paar Anregungen:
ImageBuffer, LockBuffer, UnlockBuffer, ReadPixelFast, WritePixelFast
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102

Horst der Biber

BeitragSo, Okt 16, 2005 16:20
Antworten mit Zitat
Benutzer-Profile anzeigen
wegen writepixelfast: in echtzeit berechnen war mir eigentlich nit wichtig. brauch das eigentlich nur so als bildeffekt und nicht in spielen...

hier ne neue version!!! die konturen sind stärker und vertikale linien werden jetzt auch erkannt!!
BlitzBasic: [AUSKLAPPEN]
;2005 XuKiNi-ware
;bleistiftzeichnungsapparat v2


AppTitle \"bleistiftzeichnung\"

Graphics(800,600,32,2)

bild=LoadImage(\"bild.png\")
Dim colour(ImageWidth(bild),ImageHeight(bild))
DrawBlock(bild,0,0)

For x=0 To ImageWidth(bild)
For y=0 To ImageHeight(bild)

GetColor x,y

rot=ColorRed()
gruen=ColorGreen()
blau=ColorBlue()

altefarbe=farbe

farbe=rot+gruen+blau+1
farbe=farbe/3
colour(x,y)=Abs(farbe-altefarbe)

Next
Next

For y=0 To ImageHeight(bild)
For x=0 To ImageWidth(bild)

GetColor x,y

rot=ColorRed()
gruen=ColorGreen()
blau=ColorBlue()

altefarbe=farbe

farbe=rot+gruen+blau+1
farbe=farbe/3
colour(x,y)=Abs(farbe-altefarbe)+colour(x,y)
If colour(x,y)>255 colour(x,y)=255

Next
Next

For x=0 To ImageWidth(bild)
For y=0 To ImageHeight(bild)
Color(255-colour(x,y),255-colour(x,y),255-colour(x,y))
Plot(x,y)
Next
Next
WaitKey

End
  • Zuletzt bearbeitet von Horst der Biber am So, Okt 16, 2005 18:28, insgesamt einmal bearbeitet

Spikespine

BeitragSo, Okt 16, 2005 16:27
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht gut aus!
Athlon 64 3700+ | 1024 MB RAM | GeForce 7900 GT | Blitz2D, Blitz3D, BlitzPlus, BlitzMax

Vertex

BeitragSo, Okt 16, 2005 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch egal, ob du das in Echtzeit willst, wenn du hier was postest, dann nur mit optimierten Code. Ansonsten sieht der Effekt nicht übel aus, auch wenns nur einfache Kantenerkennung ist.
mfg olli
vertex.dreamfall.at | GitHub

Horst der Biber

BeitragSo, Okt 16, 2005 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
danke! ^__________________________^

hab ma den windowsstandarthintergrund damit gerendert!!
user posted image
 

#Reaper

Newsposter

BeitragSo, Okt 16, 2005 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Häh,cool, sieht echt mal nicht schlecht aus! Smile

Ich denke ich werde damit bestimmt mal ab und zu eine kleine reihe von Screens (BF2) bearbeiten lassen Wink Very Happy


MfG
#Reaper


PS: mm.. da is wohl irgendwo nen kleiner fehler.. die oberste pixelreihebleiben so, wie sie waren, in farbe...?
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Horst der Biber

BeitragSo, Okt 16, 2005 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe danköö =))

des mit dersten bunten reihe is fixed!!
 

Apocalyptic

BeitragMo, Okt 17, 2005 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Horst der Biber hat Folgendes geschrieben:
wegen writepixelfast: in echtzeit berechnen war mir eigentlich nit wichtig. brauch das eigentlich nur so als bildeffekt und nicht in spielen...


Das ist keine Entschuldigung Wink

Netter Effekt, aber in der Form gehört er eigentlich nicht ins Codearchiv. Denn er ist - wie bereits erwähnt - weder optimiert noch flexibel. Außerdem hast du zwei kleinere Fehler gemacht: Du zeichnest eine vertikale und eine horizontale Pixelreihe zuviel und dein Array ist zu groß (ein immer wieder gern gemachter Fehler).

Hier die verbesserte Version:
BlitzBasic: [AUSKLAPPEN]
;2005 XuKiNi-ware
;bleistiftzeichnungsapparat v2
;Modified by Apocalyptic

Dim Colour(-1,-1)

;Funktionsbeispiel:
;--------------------------------------------

AppTitle \"Bleistiftzeichnung\"

Graphics 800,600,32,2

Bild=LoadImage(\"C:\Windows\Angler.bmp\")


t1=MilliSecs()

BleistiftEffekt(Bild)

t2=MilliSecs()


SetBuffer FrontBuffer()


DrawImage Bild,5,25

Text 5,5,\"Zeit: \"+(t2-t1)+\" ms\"


WaitKey()

;--------------------------------------------

Function BleistiftEffekt(Img)

Width=ImageWidth(Img)
Height=ImageHeight(Img)

Dim Colour(Width-1,Height-1)

SetBuffer ImageBuffer(Img)

LockBuffer

For x=0 To Width-1
For y=0 To Height-1
rgb=ReadPixelFast(x,y)
r=(rgb Shr 16) And $FF
g=(rgb Shr 8) And $FF
b=(rgb ) And $FF

AlteFarbe=Farbe

Farbe=r+g+b+1
Farbe=Farbe/3
Colour(x,y)=Abs(Farbe-AlteFarbe)

Next
Next

For y=0 To Height-1
For x=0 To Width-1
rgb=ReadPixelFast(x,y)
r=(rgb Shr 16) And $FF
g=(rgb Shr 8) And $FF
b=(rgb ) And $FF

AlteFarbe=Farbe

Farbe=r+g+b+1
Farbe=Farbe/3
Colour(x,y)=Abs(Farbe-AlteFarbe)+Colour(x,y)
If Colour(x,y)>255 Then Colour(x,y)=255

c=255-Colour(x,y)

WritePixelFast x,y,(c Shl 16)+(c Shl 8)+c
Next
Next

UnlockBuffer

End Function


Läuft bei mir übrigens mit einer Geschwindigkeitssteigerung auf über 9092 Prozent im Vergleich zu deiner Version Wink
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

Ironstorm

Erstklassiger Contest-Veranstalter

BeitragMo, Okt 17, 2005 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Stylisch! Shocked

Is richtig gut geworden. Lob von mir!
..:: blackbird design : blackbird photography : Futuro Verde : X-Commander ::..
MacBook | Intel Core 2 Duo 2,1 GHz | 2048 MB RAM | 80 GB HDD | Mac OS X 10.6.2 (Snow Leopard) | Adobe CS4 Design Premium

MBC

BeitragMo, Okt 17, 2005 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hi!

jetzt muss ich da auch ma noch meinen senf dazugeben.
folgender code läuft bei mir noch n bisschen schneller (~400ms unterschied)

BlitzBasic: [AUSKLAPPEN]

Const strenght=1
Const intensity=1

Graphics 800,600,32,1
SetBuffer BackBuffer()
ClsColor 255,255,255

image=LoadImage(\"C:\Windows\Web\Wallpaper\Grüne Idylle.bmp\")
If ImageHeight(image)>600 Or ImageWidth(image)>800 Then ResizeImage image,ImageWidth(image)/2,600

Dim pixel(ImageWidth(image),ImageHeight(image))
Global new_image=CreateImage(ImageWidth(image),ImageHeight(image))


.start

DrawImage image,0,0
Flip
timer=MilliSecs()
kanten(image,strenght,intensity)
Text 10,10,(MilliSecs()-timer)+\" ms\"
Flip

WaitKey()
If KeyHit(57) Then Goto start
End



Function kanten(image,strenght,intensity)

SetBuffer ImageBuffer(new_image)
DrawImage image,0,0

LockBuffer(ImageBuffer(new_image))
For x=0 To ImageWidth(image)-1
For y=0 To ImageHeight(image)-1
pixel(x,y)=ReadPixelFast(x,y)
Next
Next
UnlockBuffer(ImageBuffer(new_image))

SetBuffer BackBuffer()
Color 200,0,0
Text 400,300,\"Bitte warten...\",1,1
Text 400,320,\"Kantenerkennung läuft...\",1,1
Flip



SetBuffer ImageBuffer(new_image)

LockBuffer(ImageBuffer(new_image))
For x=1 To ImageWidth(image)-1
For y=1 To ImageHeight(image)-1
r1=(pixel(x,y) And $FF0000)/$10000
g1=(pixel(x,y) And $FF00)/$100
b1=pixel(x,y) And $FF

r2=(pixel(x-1,y-1) And $FF0000)/$10000
g2=(pixel(x-1,y-1) And $FF00)/$100
b2=pixel(x-1,y-1) And $FF

color1=r1+g1+b1
color2=r2+g2+b2

diff=(255*strenght-Abs(color2-color1)/strenght)*intensity

rgb=diff*$10000 + diff*$100 + diff

WritePixelFast x,y,rgb
Next
Next
UnlockBuffer(ImageBuffer(new_image))
SetBuffer BackBuffer()
DrawImage new_image,0,0

End Function


mit den consts kann man das ganze auch nochn bisschen stärker machen oder abschwächen, einfach ma porbieren...

und @Horst: Coole Idee, wär ich wohl so ie drauf gekommen... thx Wink

MfG
MBC

EDIT: @reaper: danke, hätt ich gar nich bemerkt, mag nämlich kein vollbild^^... weiß aber auch grad überhaupt nich, warum das net funzt... wenns jemand weiß, bitte pn oder so, damit dieser thread nich noch weiter in die länge gezogen wird... thx
Computer sind auch nur Menschen! Wink
  • Zuletzt bearbeitet von MBC am Mo, Okt 17, 2005 21:11, insgesamt 2-mal bearbeitet
 

#Reaper

Newsposter

BeitragMo, Okt 17, 2005 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@MBC: auch nice Very Happy
nur, es funktioniert nicht im fullscreen Wink


#Reaper
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

Apocalyptic

BeitragMo, Okt 17, 2005 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
@ MBC: Du hast wieder den selben Fehler wie Horst eingebaut Wink Daher auch der MAV.

Es muss heißen:
BlitzBasic: [AUSKLAPPEN]
  For x=0 To ImageWidth(image)-1
For y=0 To ImageHeight(image)-1
pixel(x,y)=ReadPixelFast(x,y)
Next
Next
etc.
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

MBC

BeitragMo, Okt 17, 2005 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
namd

ok, geklärt, version oben angepasst, klappt jetzt auch im fullscreen, thx @ apocalyptic

zu den 25% langsamer: also, ich hatte das ding wirklich nur mit der Grünen Idylle (^^) getestet... habs jetzt auch ma mitm angler versucht... bei deiner schwankt das bei mir von 47 bis 91 ms (aber eher tendenz zu 47 Wink), und meine liegt so etwa bei 60ms... also scheint deine bei kleineren bildern im vorteil zu sein, und meien bei größeren... vielleicht sollten wir uns zusammentun^^

P.S.: Was is n MAV???

EDIT: Habs jetzt grad nochma im fullscreen getestet: da is meine (zumindest auf meinem system) beim angler wieder n klein bisschen schnellr... net viel, vielleicht so 20ms oder so, aber immerhin^^... wie isses denn bei dir?
Computer sind auch nur Menschen! Wink

Horst der Biber

BeitragMo, Okt 17, 2005 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
mav=memory access violation..

hehe danke für s codeoptimieren Very Happy
hab das nit hingekriegt mit den komeschen hexzahlen

edit
hab mir grad ma die version von mbc angeguckt. find da die farbübergangserkennung zu stark. bei den jpg bilders sieht man dann so 8x8 grosse kästchen..
  • Zuletzt bearbeitet von Horst der Biber am Mo, Okt 17, 2005 21:21, insgesamt einmal bearbeitet
 

#Reaper

Newsposter

BeitragMo, Okt 17, 2005 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
öööm...
bei mir braucht das ~780ms...o_O
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

MBC

BeitragMo, Okt 17, 2005 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@reaper: welches bild braucht 780ms? der angler oderdie Idylle?
@Horst: stell ma die konstante srenght auf 2, dann isses nich mehr so extrem, sondern sieht aus wie deins und das von apokalyptic Wink
Computer sind auch nur Menschen! Wink
 

#Reaper

Newsposter

BeitragMo, Okt 17, 2005 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
das von der Idylle..^^

seh gerade.. da stand ja dann noch die zeit vom angler, nicht von der idylle, das hatte ich übersehen..sry Embarassed
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7
 

Buddah

BeitragDi, Okt 18, 2005 4:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir mal erlaubt noch ein wenig zu verändern.
Das bild wird nun so resized das die aspect ratio des bildes erhalten bleibt
(ich weiss eher unwichtig.. aber es war mir dennoch ein bedürfnis Wink )
und ich hab noch rund 25ms im schnitt an speed rausgeholt durch paar
shift befehle und variablen benutzen wo vorher der wert dauernd neu
geholt/errechnet wurde und noch anderer kleinkram.

BlitzBasic: [AUSKLAPPEN]
Const strenght=1
Const intensity=1

Graphics 800,600,32,2
SetBuffer BackBuffer()
ClsColor 255,255,255

image=LoadImage(\"C:\dos\grafiken\galerie_coopers_bild1_1024x768.jpg\")
MaskImage image, 255,0,255

If ImageHeight(image)>600 Or ImageWidth(image)>800 Then
h# = Float(ImageWidth(image)) / ImageHeight(image)
h# = 800 / h#
ResizeImage image,800,h#
EndIf

Dim pixel(ImageWidth(image),ImageHeight(image))
Global new_image=CreateImage(ImageWidth(image),ImageHeight(image))

.start

DrawImage image,0,0
Flip
timer=MilliSecs()
kanten(image,strenght,intensity)
Text 10,10,(MilliSecs()-timer)+\" ms\"
Flip

WaitKey()
If KeyHit(57) Then Goto start
End


Function kanten(image,strenght,intensity)
buffer = ImageBuffer(new_image)
width = ImageWidth(image)-1
height = ImageHeight(image)-1

SetBuffer BackBuffer()
Color 200,0,0
Text 400,300,\"Bitte warten...\",1,1
Text 400,320,\"Kantenerkennung läuft...\",1,1
Flip

SetBuffer buffer
DrawImage image,0,0

LockBuffer(buffer)
For x=0 To width
For y=0 To height
pixel(x,y)=ReadPixelFast(x,y)
Next
Next
For x=1 To width
For y=1 To height
r1=(pixel(x,y) And $FF0000) Shr 16
g1=(pixel(x,y) And $FF00) Shr 8
b1=pixel(x,y) And $FF
r2=(pixel(x-1,y-1) And $FF0000) Shr 16
g2=(pixel(x-1,y-1) And $FF00) Shr 8
b2=pixel(x-1,y-1) And $FF

color1=r1+g1+b1
color2=r2+g2+b2

diff=(255-(Abs(color2-color1)/strenght))*intensity

rgb=(diff Shl 16) + (diff Shl 8) + diff

WritePixelFast x,y,rgb
Next
Next
UnlockBuffer(buffer)
SetBuffer BackBuffer()
DrawImage new_image,0,0
End Function
Alles ist gut so wie es ist und bald wird alles anders.

Devils Child

BeitragDi, Okt 18, 2005 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
gut gemacht horst Smile

BlitzBasic: [AUSKLAPPEN]
AppTitle \"Bleistiftzeichnung\"

Graphics 1280, 1024, 32, 3
SetBuffer BackBuffer()

Dim Col(1280, 1024)

ms = MilliSecs()
Img = PencilImage(\"Image.bmp\")
;RuntimeError MilliSecs() - ms + \" millisecs token.\"
DrawBlock Img, 0, 0
Flip
WaitKey()
End

Function PencilImage(path$)
Image = LoadImage(path$)
If Image = 0 Then RuntimeError \"Image does not exist.\"
imgWidth = ImageWidth(Image)
imgHeight = ImageHeight(Image)
If imgWidth > 1280 Or imgHeight > 1024 Then RuntimeError \"Illegal image size\"
LockBuffer BackBuffer()
LockBuffer ImageBuffer(Image)
For x = 0 To imgWidth
For y = 0 To imgHeight
Pix = ReadPixelFast(x, y, ImageBuffer(Image))
r = Red(Pix)
g = Green(Pix)
b = Blue(Pix)
oldc = c
c = r / 3 + g / 3 + b / 3
Col(x, y) = Abs(c - oldc)
Col(x, y) = Col(x, y) + Abs(c - oldc)
If Col(x, y) > 255 Col(x, y) = 255
Next
AppTitle \"Go1::\" + x + \"/\" + imgWidth
Next
;New Image
ImgNew = CreateImage(imgWidth, imgHeight)
LockBuffer ImageBuffer(ImgNew)
For x = 0 To imgWidth
For y = 0 To imgHeight
WritePixelFast x, y, RGB(255 - Col(x, y), 255 - Col(x, y), 255 - Col(x, y)), ImageBuffer(ImgNew)
Next
AppTitle \"Go3::\" + x + \"/\" + imgWidth
Next
UnlockBuffer ImageBuffer(ImgNew)
UnlockBuffer BackBuffer()
FreeImage Image
Return ImgNew
End Function

Function Red(rgb)
Return (rgb And $FF0000) / $10000
End Function

Function Green(rgb)
Return (rgb And $FF00)/$100
End Function

Function Blue(rgb)
Return rgb And $FF
End Function

Function RGB(r, g, b)
Return r * $10000 + g * $100 + b
End Function


ich hab das ganze mal um das 10 fache optimiert, immer wenn ich geilen code sehe muss ich ihn optimieren!!! Very Happy
*X-Ware Member*

Mission to Hell[Ego-Shooter]
Hier Vollversion runterladen:
http://patrick-sch.de/spiele/m...ersion.zip

ich antworte auf jede PN

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group