Bleistiftzeichnung

Übersicht BlitzBasic Codearchiv

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Buddah

BeitragDi, Okt 18, 2005 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab nochmal paar ms rausgeholt. Glaube viel geht da nun nicht mehr.
Hab auch eine version gebaut die nur mit einer doppel schleife lief.. aber
die is gleich viel langsamer.. wieso kann ich mir einfach nich erklären
liegts an dem IF?! Vielleicht ist auch ein denk fehler drinn.. schauts euch
mal bitte an und lasst eure meinung hören Smile



Hier nun erst die momentan schnellste version (zumindest bei mir)
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)-1,ImageHeight(image)-1)
Global new_image=CreateImage(ImageWidth(image),ImageHeight(image))


.start
Color 255,0,0
DrawImage image,0,0
Flip

timer1=MilliSecs()
kanten(image,strenght,intensity)
timer2=MilliSecs()

DrawImage new_image,0,0
Text 10,10,(timer2-timer1)+\" ms\"
Flip

WaitKey()
If KeyHit(57) Goto start
End


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

SetBuffer buffer
DrawImage image,0,0

LockBuffer(buffer)
For x=0 To width
For y=0 To height
col=ReadPixelFast(x,y)
r=(col And $FF0000) Shr 16
g=(col And $FF00) Shr 8
b= col And $FF
pixel(x,y) = (r+g+b) / strenght
Next
Next
For x=1 To width
For y=1 To height
diff = (255-Abs(pixel(x-1,y-1)-pixel(x,y))) * intensity
rgb=(diff Shl 16) + (diff Shl 8) + diff
WritePixelFast x,y,rgb
Next
Next

UnlockBuffer(buffer)
SetBuffer BackBuffer()
End Function



Und hier die version mit einer doppel schleife die aber viel langsamer ist
obwohl sie eigentlich schneller sein müsste.. außer vielleicht IF´s sind
sehr langsam.
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)-1,ImageHeight(image)-1)
Dim old(ImageHeight(image)-1)
Global new_image=CreateImage(ImageWidth(image),ImageHeight(image))


.start
Color 255,0,0
DrawImage image,0,0
Flip

timer1=MilliSecs()
kanten(image,strenght,intensity)
timer2=MilliSecs()

DrawImage new_image,0,0
Text 10,10,(timer2-timer1)+\" ms\"
Flip

WaitKey()
If KeyHit(57) Goto start
End


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

SetBuffer buffer
DrawImage image,0,0

LockBuffer(buffer)
For x=0 To width
For y=0 To height
col=ReadPixelFast(x,y)
r=(col And $FF0000) Shr 16
g=(col And $FF00) Shr 8
b= col And $FF
pixel(x,y) = (r+g+b) / strenght
If x > 0 And y > 0 Then
diff = (255-Abs(old(y-1)-pixel(x,y))) * intensity
rgb=(diff Shl 16) + (diff Shl 8) + diff
WritePixelFast x,y,rgb
old(y) = pixel(x,y)
Else
old(y) = pixel(x,y)
EndIf
Next
Next

UnlockBuffer(buffer)
SetBuffer BackBuffer()
End Function
Alles ist gut so wie es ist und bald wird alles anders.
 

#Reaper

Newsposter

BeitragDi, Okt 18, 2005 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Öömm... wird das hier nen Wettbewerb..?^^ Very Happy Laughing
Rolling Eyes


#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
 

Florian

BeitragDi, Okt 18, 2005 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht noch schneller

BlitzBasic: [AUSKLAPPEN]


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

image=LoadImage(\"C:\Windows\Web\Wallpaper\Grüne Idylle.bmp\")
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)-1,ImageHeight(image)-1)
Global new_image=CreateImage(ImageWidth(image),ImageHeight(image))


.start
Color 255,0,0
DrawImage image,0,0
Flip

timer1=MilliSecs()
kanten(image,strenght,intensity)
timer2=MilliSecs()

DrawImage new_image,0,0
Text 10,10,(timer2-timer1)+\" ms\"
Flip

WaitKey()
If KeyHit(57) Goto start
End


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

SetBuffer buffer
DrawImage image,0,0

LockBuffer(buffer)
For x=0 To width
For y=0 To height
col=ReadPixelFast(x,y)
pixel(x,y) = ((col And $FF0000) Shr 16)+((col And $FF00) Shr 8)+(col And $FF)
Next
Next
For x=1 To width
For y=1 To height
diff = (255-Abs(pixel(x-1,y-1)-pixel(x,y)))
WritePixelFast x,y,(diff Shl 16) + (diff Shl 8) + diff
Next
Next

UnlockBuffer(buffer)
SetBuffer BackBuffer()
End Function

Artemis

BeitragDi, Okt 18, 2005 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist einfach genial.
 

Buddah

BeitragDi, Okt 18, 2005 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@ florian
deine version ist bei mir langsamer.. außerdem hast du die constanten
weg rationiert die zur einstellung des effektes dienten Smile

Normal sollte es schneller sein allein schon weil die berechnungen fehlen
die man mit den constanten gemacht hatte. Naja was solls...

Blick da bei Blitzbasic nich durch was effizienter ist.. mir scheint manche
befehle wie z.b. IF anweisungen oder divisionen mit dem normalen / operator
sind besonders langsam.
Alles ist gut so wie es ist und bald wird alles anders.

MBC

BeitragDi, Okt 18, 2005 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, also bei mir läufts florians schneller... kann natürlich auch teilweise an den nicht mehr vorhandenen konstanten liegen...
die hab ich ja eigentlich reingebracht, s war mehr so ne spielerei, deshalb denke ich, dass man auch mit einer const auskommen sollte (stellt ma beide auf 2, die heben sich irgendwie gegenseitig auf Laughing), was dann n prima mittelweg wäre (also recht schnell und effektstärke einstellbar)...

ansonsten noch respekt an alle, die den code bisher schon schneller gemacht hamm, echt cool
ich warte auf die nächste steigerung Wink
Computer sind auch nur Menschen! Wink
 

Buddah

BeitragDi, Okt 18, 2005 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab mir jetzt mal nen spaß draus gemacht die versionen ausgiebig zu testen. Die constanten komplett rausnehmen läuft auf meinem intel schneller.
Also Florians version. Meine version dagegen läuft auf meinem AMD schneller.

Ich denke das beste wird sein jeder nimmt sich für ihn schnellste version Very Happy
Da das also nun auch noch abhängig is von den vorlieben des Prozessors
machts noch schwieriger.. schade.
Alles ist gut so wie es ist und bald wird alles anders.
 

$tankY

BeitragMo, Nov 14, 2005 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked Fett, ziemlich schnell (gute optimierung) und sonst ziemlich gut, errinnert michan die Comic Funktion von Photofiltre (Bildbearbeitungsprog.). Respekt.
Hier ma der Vergleich:
Dein Prog
PhotoFiltre mit der Bleistift Funktion

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group