Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Array in einer Bitmap speichern? (https://www.delphipraxis.net/28398-array-einer-bitmap-speichern.html)

Nikolas 24. Aug 2004 12:04


Array in einer Bitmap speichern?
 
Ich schreib grad an einem Projekt in dem ich ein größeres Array fülle (500*600), dessen Werte später in einem Bild dargestellt werden (Integer->RGB). Jetzt will ich das Ganze speichern, also entweder gebe ich das Array weiter oder das Bild. Jetzt will ich wissen ob es möglich wäre, die Bitmap per Canvas.SavetoFile zu speichern und nachher aus den Farbwerten das Array wiederherzustellen. Geht das genau, oder gibt's da Fehler durch eine mögliche Kompression?
Vorteil am Bildweitergeben ist natürlich, dass man sich die Daten auch einfach in Paint o.ä. anschauen kann.

roderich 24. Aug 2004 12:21

Re: Array in einer Bitmap speichern?
 
hallo Toxman,

Probleme mit Kompression sollten nicht auftreten, da Bitmaps (.bmp) in aller Regel in voller Größe gespeichert werden.
D.h. selbst ein einfarbiges Bitmap hat diese Größe in Byte:

Header_Größe (mögliche Header-Definitionen findet man sicher per Google)
+
Breite * Höhe * BitsPerPixel / 8

Wenn Du 32 Bits pro Pixel festlegst, kannst Du 32 bit integer-Zahlen in die Pixels-Eigenschaft schieben.

Soweit ich weiß gibt's aber kein Canvas.SaveTofile, aber ein Bitmap.SaveToFile.

Gruß
Roderich

Nikolas 24. Aug 2004 12:25

Re: Array in einer Bitmap speichern?
 
Danke, ich glaub, dass wird dann doch etwas groß. Ich werd mir da ne Klasse drum rum schreiben und dann einfach eine KlassenVariable per savetofile in eine typisierte Datei schreiben.

Trotzdem Danke :thumb:

roderich 24. Aug 2004 12:27

Re: Array in einer Bitmap speichern?
 
woran ich aber jetzt net gedacht hatte:
bin mir auch nicht sicher, ob ein Bitmap-Objekt nicht beim Lesen/Schreiben seine Pixels-Einträge (die ja vom Typ TColor sind) in irgendeiner Form manipuliert, z.B. das höchstwertige Byte auf $00, $01, oder $02 setzt.

mußte halt probieren :wink:

Roderich

Steve 24. Aug 2004 12:29

Re: Array in einer Bitmap speichern?
 
Servus,

TCanvas kann meines Wissens nach nicht "direkt" gespeichert werden, TBitmap allerdings schon (Delphi-Referenz durchsuchenSaveToStream). Kompression o.ä. legste ja selber beim Speichern fest, also dürfte da kein Problem auftreten. Schau Dir dafür auch ma MSDN-Library durchsuchenbitmapinfoheader und wotsit an.

PS: Ich persönlich würd dem Anwender vermutlich die Wahl lassen: Speichern (Array) oder Export als Bitmap (dann könnteste u.U. auch mit Kompression arbeiten oder evtl. anderes Format wählen ;) )

Gruß
Stephan

Boombuler 24. Aug 2004 12:51

Re: Array in einer Bitmap speichern?
 
Solltest du es in ein Bitmap speichern und nachher kompremieren (zB JPEG) dann solltest du drauf achten das du dir ein verlustfreies Format aussuchst... (also nich jpeg) zB Tiff...
nur so als Tipp....

Greetz
Boombuler

Nikolas 24. Aug 2004 12:58

Re: Array in einer Bitmap speichern?
 
Es gibt die Möglichkeit einfach Canvas.Bitmpat.Savetofile zu nehmen und dann einfach zu speichern.
Ich mach das doch eher über eine Klasse, die dann recht simpel geschrieben und gelesen werden kann.

scp 24. Aug 2004 13:00

Re: Array in einer Bitmap speichern?
 
Ich denke, selbst bei einem verlustfreien Format sind die "Überlebenschancen" für das höchstwertige Byte sehr gering.
Selbst das original TBitmap arbeitet meines Wissens maximal mit 24 bit.

Steve 24. Aug 2004 13:03

Re: Array in einer Bitmap speichern?
 
TCanvas hat eine Eigenschaft Bitmap ? :gruebel: :shock:
Eher andersrum, oda? :stupid:
Delphi-Quellcode:
//Bissl Pseudocode :)
bmp := TBitmap.Create...
bmp.Canvas.Assign(derAndereCanvas);
bmp.SaveToStream
...
Gruß
Stephan

Nikolas 24. Aug 2004 13:37

Re: Array in einer Bitmap speichern?
 
Also nu mal zum Mitschreiben.
Über Canvas oder Bitmap läuft das gar nicht :oops:

Einfach so in ne Datei geht über
Delphi-Quellcode:
Image1.picture.savetofile('Bild.bmp');
Ganz einfach, ohne zusätzliche Sachen :wall:

dizzy 24. Aug 2004 17:42

Re: Array in einer Bitmap speichern?
 
*malsoindenraumwerf*: Bitmaps sind auch nur Arrays :warn:

Es macht von der Logik her kaum einen Unterschied, ob du nen Array streamst, oder ein Bitmap speicherst. Nur spart man sich ohne Bitmap wohl einiges an Konvertierungs/Kopier-Aufwand.

Nikolas 24. Aug 2004 17:51

Re: Array in einer Bitmap speichern?
 
Mein Problem ist nut grad, dass ich es nicht hinbekomm, dass array zu speichern. Wie funktioniert das mit den Streams???


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz