Bild Converter + Lesen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

GeGenesis

Betreff: Bild Converter + Lesen

BeitragFr, Nov 12, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich arbeite an meinen bildprogramm und wollte man ein eigenes dateiformat machen aber beim lesen eines 100x100 bildes wird alles schwarz weis angezeigt ...

Converter
Code: [AUSKLAPPEN]

Graphics 800,600,16,0
b$=Input("Bild>")
bild=LoadImage(b$)
f$=Input("File>")
file=WriteFile (f$)
Cls()
DrawImage(bild,0,0)
WriteInt(file,ImageWidth (bild))
WriteInt(file,ImageHeight(bild))
For y=0 To ImageHeight(bild)-1
For x=0 To ImageWidth (bild)-1
rgb=ReadPixel (x,1)   
r=rgb And $FF0000/$10000
g=rgb And $FF00/$100
b=rgb And $FF
WriteInt(file, x)
WriteInt(file, y)
WriteInt(file, r)
WriteInt(file, g)
WriteInt(file, b)
Next
Next
WaitKey()[/b]

Anzeige:
Code: [AUSKLAPPEN]

Graphics 800,600,16,0
f$=Input("File>")
file=ReadFile (f$)
br=ReadInt(file)
ho=
For y=0 To ho
For x=0 To br
x=ReadInt(file)
y=ReadInt(file)
r=ReadInt(file)
g=ReadInt(file)
b=ReadInt(file)
Color(r,g,b)
Plot(x,y)
Next
Next
Color(255,255,255)
Text 10,ho+10,"Br:"+br+" Hö:"+ho
WaitKey()



Wo ist da das problem ?
 

David

BeitragFr, Nov 12, 2004 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Was mir so spontan aufällt:

Code: [AUSKLAPPEN]

WriteInt(file, x)
WriteInt(file, y)
WriteInt(file, r)
WriteInt(file, g)
WriteInt(file, b)


Du machst dadurch deine Datei nur unütz groß! Weil r, g, b können nur einen Maximalwert von 255 enthalten also reicht ein Byte genau aus. Wenn du jeden Wert als Byte speicherst sparst du pro Farbwert 9 Byte.
Und die Koordinaten sind auch unsinnig... Kann man natürlich machen, ist aber nicht gerade platzsparend...

Auserdem liest du immer nur die erste Pixelreihe ein... Kann das sein?

Code: [AUSKLAPPEN]

ReadPixel (x,1)


Auserdem wäre es sinnig den Alphakanal zu berücksichtigen (falls vorhanden) da dieser sonst verloren geht.

Edit:

Hier deine Version, ohne Alphakanal und ohne jegliche Verbesserung:

Converter
Code: [AUSKLAPPEN]

Graphics 800, 600, 32

img = LoadImage( "test.bmp" )
file = WriteFile( "test.raw" )

width = ImageWidth( img )
height = ImageHeight( img )

WriteShort( file, width )
WriteShort( file, height )

LockBuffer( ImageBuffer( img ) )
SetBuffer( ImageBuffer( img ) )

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
      
      WriteByte( file, r )
      WriteByte( file, g )
      WriteByte( file, b )
   Next
Next

UnlockBuffer()

CloseFile( file )

WaitKey


Loader
Code: [AUSKLAPPEN]

Graphics 800, 600, 32

file = OpenFile( "test.raw" )

width = ReadShort( file )
height = ReadShort( file )

img = CreateImage( width, height )

LockBuffer( ImageBuffer( img ) )
SetBuffer( ImageBuffer( img ) )

For x = 0 To width - 1
   For y = 0 To height - 1
      r = ReadByte( file )
      g = ReadByte( file )
      b = ReadByte( file )
      
      rgb = ( r Shl 16 ) Or ( g Shl 8 ) Or b
      
      WritePixelFast( x, y, rgb )
   Next
Next

UnlockBuffer( ImageBuffer( img ) )
SetBuffer( FrontBuffer() )

DrawImage( img, 0, 0 )
WaitKey



grüße
http://bl4ckd0g.funpic.de
 

GeGenesis

BeitragFr, Nov 12, 2004 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
danke hatte aber schon gelöst

Triton

BeitragFr, Nov 12, 2004 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum speicherst du x und y mit in die Datei?

Du gehst diese Werte doch eh in der Schleife ab, somit brauchst du sie nicht mehr einlesen und deine Datei ist gleich 40% kleiner. Wink
Coding: silizium-net.de | Portfolio: Triton.ch.vu
 

GeGenesis

BeitragFr, Nov 12, 2004 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
oh ist mir garnicht aufgefallen danke
 

David

BeitragFr, Nov 12, 2004 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Wie gesagt... Rolling Eyes
Aber anscheinend hast du meinen Beitrag ja nicht richtig gelesen...

grüße
http://bl4ckd0g.funpic.de

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group