Bild Converter + Lesen
Übersicht

GeGenesisBetreff: Bild Converter + Lesen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke hatte aber schon gelöst | ||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
GeGenesis |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh ist mir garnicht aufgefallen danke | ||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Wie gesagt... ![]() Aber anscheinend hast du meinen Beitrag ja nicht richtig gelesen... grüße |
||
http://bl4ckd0g.funpic.de |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group