Delphi-PRAXiS
Seite 1 von 2  1 2      

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Seite 1 von 2  1 2      

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