Bilder vergrößern

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

sbrog

Betreff: Bilder vergrößern

BeitragSo, Mai 23, 2004 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ziemlich nutzloser Code, wegen scaleimage. Vielleicht kennt jemand noch andere Möglichkeiten, ein Bild zu vergrößern., die Tatsächlich schneller sind als scaleimage


Pseudocode :
BlitzBasic: [AUSKLAPPEN]

Graphics 800,600

bild = LoadImage("ball.bmp")

DrawImage bild,0,0

WaitKey

For a=0 To ImageWidth(bild)
For b=0 To ImageHeight(bild)
GetColor a,b
aa= ColorRed()
bb= ColorGreen()
cc= ColorBlue()

Color aa,bb,cc
Plot (a+ImageWidth(bild))*2,b*2
Plot (a+ImageWidth(bild))*2+1,b*2
Plot (a+ImageWidth(bild))*2+1,b*2+1
Plot (a+ImageWidth(bild))*2,b*2+1
Next
Next

WaitKey

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Mai 23, 2004 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das kann man so gelten lassen.
Aber ich würde das neue Bild noch in den ImageBuffer laden, um ein wirklich ein neues bild zu kreiren.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

DivineDominion

BeitragSo, Mai 23, 2004 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wär's mit WritePixelFast und seinem Read-gegenstück? Und einem Imagebuffer? Smile Das wäre sicher schneller als das geplotte da Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS

sbrog

BeitragSo, Mai 23, 2004 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ich gebmein bestes..heute mittag aber erst. Very Happy
Ich hab vor das ganze in eine Funktion vergrößern(Faktor) zu schreiben

Kabelbinder

Sieger des WM-Contest 2006

BeitragSo, Mai 23, 2004 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Und Villeicht statt der vielen Plots Rects, falls das schneller ist, schließlich will man das Bild ja nicht immer nur doppelt so groß Skalieren, sondern vielleicht auch mal dreimal, viermal oder halb so groß. Smile
<Wing Avenger Download> ◊◊◊ <Macrophage Download>
 

Edlothiol

BeitragSo, Mai 23, 2004 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Vom BlitzCoder - CodeArchiv, von mir ein bisschen verändert:
BlitzBasic: [AUSKLAPPEN]
Global scratch = CreateImage(1600,1400)

Function DrawSizeBlock(image,x%,y%,w%,h%)
Local ih%=ImageHeight(image)
Local iw%=ImageWidth(image)

Local sw%=Abs(w)
Local sh%=Abs(h)

Local xr#=Float(iw)/Float(sw)
Local yr#=Float(ih)/Float(sh)

fromimg=ImageBuffer(image)
toimg=ImageBuffer(scratch)

Local vf=-1+((h>0)*2)

Local fw=(w<0)*w
Local fh=(h<0)*h

If w>=0
For ix=0 To sw
CopyRect Floor(ix*xr),0,1,ih,ix,0,fromimg,toimg
Next
Else
For ix=0 To sw
CopyRect ix*xr,0,1,ih,sw-ix,0,fromimg,toimg
Next
EndIf


For iy=0 To sh
CopyRect 0,Floor(iy*yr),sw,1,x+fw,y+(iy*vf),toimg, GraphicsBuffer()
Next

End Function
Das macht das ganze unmaskiert, wenn mans maskiert will erst in ein Zwischenbild malen, das dann maskieren und DrawImage.
  • Zuletzt bearbeitet von Edlothiol am Mo, Mai 24, 2004 19:45, insgesamt 2-mal bearbeitet

sbrog

BeitragSo, Mai 23, 2004 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Kabelbinder hat Folgendes geschrieben:
Und Villeicht statt der vielen Plots Rects, falls das schneller ist, schließlich will man das Bild ja nicht immer nur doppelt so groß Skalieren, sondern vielleicht auch mal dreimal, viermal oder halb so groß. Smile


deshalb mein ich ja, dass ich das ganze in eine funktion schreibe.
Man müsste dann nur das mal *2 durch *faktor ersetzen und das ganze in einer for schleife laufen lassen,die sich (faktor-1)-mal wiederholt

Triton

BeitragSo, Mai 23, 2004 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube TheShadow und ich hatten auch schon unsere Methoden gepostet vor einige Monaten. Die waren auf jeden Fall schneller als
der normale BB-befehl.

Suco-X

Betreff: .....

BeitragMo, Mai 24, 2004 2:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal langsam Cowboys. ScaleImage läuft Standard noch mit einem Weichzeichnungs Filter mit. Mit Tformfilter 0 kann man das beheben.
Habs mal getestet.
1266 ms Standard
476 ms mit Tformfilter 0 vor dem Scalieren.
Also das läuft fast 3x schneller. Das gilt also noch zu beachten bevor ihr euch an irgendwelchen Methoden Probiert die sowieso langsamer laufen werden als Standard Befehle.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Edlothiol

BeitragMo, Mai 24, 2004 8:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Probier das mal aus:
BlitzBasic: [AUSKLAPPEN]

Global scratch = CreateImage(1600,1400)

Function DrawSizeBlock(image,x%,y%,w%,h%)
Local ih%=ImageHeight(image)
Local iw%=ImageWidth(image)

Local sw%=Abs(w)
Local sh%=Abs(h)

Local xr#=Float(iw)/Float(sw)
Local yr#=Float(ih)/Float(sh)

fromimg=ImageBuffer(image)
toimg=ImageBuffer(scratch)

Local vf=-1+((h>0)*2)

Local fw=(w<0)*w
Local fh=(h<0)*h

If w>=0
For ix=0 To sw
CopyRect Floor(ix*xr),0,1,ih,ix,0,fromimg,toimg
Next
Else
For ix=0 To sw
CopyRect ix*xr,0,1,ih,sw-ix,0,fromimg,toimg
Next
EndIf


For iy=0 To sh
CopyRect 0,Floor(iy*yr),sw,1,x+fw,y+(iy*vf),toimg, GraphicsBuffer()
Next

End Function

blah = CreateImage(100,100)
blah2 = CreateImage(100,100)
blah3 = CreateImage(100,100)

time = MilliSecs()

ResizeImage blah, 200,200
DrawImage blah,0,0

time1 = MilliSecs() - time
time = MilliSecs()
TFormFilter 0
ResizeImage blah2,200,200
DrawImage blah2,0,0

time2 = MilliSecs() - time
time = MilliSecs()

DrawSizeBlock blah3,0,0,200,200

time3 = MilliSecs() - time

Print "TFormfilter 1: " + time1
Print "TFormfilter 0: " + time2
Print "DrawSizeBlock: " + time3

WaitKey
Mein Ergebnis:
TFormfilter 1: 162
TFormfilter 0: 48
DrawSizeBlock: 3...
  • Zuletzt bearbeitet von Edlothiol am Mo, Mai 24, 2004 19:45, insgesamt 2-mal bearbeitet

Suco-X

Betreff: .......

BeitragMo, Mai 24, 2004 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich frage mich was die DrawSizeBlock Funktion mit Scalieren zu tun haben soll. Schaus dir doch mal genauer an, und besonders das ergebniss.
Wen ich ein image größere Zeichnen will als es schon ist, zeigt die Routine nichts mehr an. Wen ich es kleiner machen will klappt das auch nur mit dem ein oder anderen überraschenden ergebniss. Die Routine könnte man höchstens als DrawBlock ersatz sehen, und schaue dir dann mal die ergebnisse an
BB : 0
Routine : 3-4..
Also was war jetzt der genaue Sinn dieser DrawSizeBlock funktion und was zum teufel hat das mit Skalieren zu tun? Nur neugierig falls ich mich doch vertan habe.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Edlothiol

BeitragMo, Mai 24, 2004 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Argh, da war ein Fehler drin...
Jetzt müsste es klappen...

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Mai 24, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe da auch mal eine geschrieben,
aber nur zum verdoppeln der Größe:BlitzBasic: [AUSKLAPPEN]
Function rezize_X2_bank(Bild)
Banks = CreateBank (ImageWidth(Bild)*2 *ImageHeight(Bild)*2*4)
bilddummy = CreateImage (ImageWidth(Bild)*2,ImageHeight(Bild)*2)
SetBuffer ImageBuffer (bild)
LockBuffer ImageBuffer (bild)
For x = 0 To ImageWidth (bild)-1
For y = 0 To ImageHeight(bild)-1
PokeInt Banks,z,ReadPixelFast(x,y)
z = z + 4
Next
Next
UnlockBuffer ImageBuffer(bild)
SetBuffer ImageBuffer (bilddummy)
LockBuffer ImageBuffer(bilddummy)
z = 0
For x = 0 To ImageWidth (bild)-1
For y = 0 To ImageHeight(bild)-1
b1= PeekInt (Banks,z)
x1= x*2
y1= y*2
WritePixelFast x1 ,y1 ,b1
WritePixelFast x1+1,y1 ,b1
WritePixelFast x1 ,y1+1,b1
WritePixelFast x1+1,y1+1,b1
z = z + 4
Next
Next
UnlockBuffer ImageBuffer(bilddummy)
FreeBank Banks
Return bilddummy
End Function

ist ca. 4x so schnell wie scaleimage....ohne tformfilter natürlich!

mit Arrays anstatt Banks ist etwas schneller aber nur minimal
[BB2D | BB3D | BB+]

Suco-X

Betreff: .....

BeitragDi, Mai 25, 2004 1:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Jaja, müsst ihr den armen Suco immer so verführen ihr Strolche? Laughing
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group