AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Binärbild einlesen

Ein Thema von alleinherrscher · begonnen am 4. Jan 2011 · letzter Beitrag vom 5. Jan 2011
 
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Binärbild einlesen

  Alt 5. Jan 2011, 01:19
Die richtige Vorgehensweise wäre so:
1.) ein 2-dimensionales Array der Grösse 550 * 550 anlegen
Delphi-Quellcode:
type
  TTunnelDataArray = array[0..549, 0..549] of SmallInt;
var
  tunneldata : TTunnelDataArray;
2.) die Datei auf einen Rutsch auf das Array einlesen einlesen
2b.) ggf. eine Korrektur der Byteorder für jedes Arrayelement vornehmen
die nachträgliche Korrektur ist wesentlich schneller und einfacher als wenn man dies direkt beim Einlesen vornehmen würde.
3.) ein Bitmap mit 24 Bit Farbtiefe mit entsprechende Grösse anlegen
4.) eine Zuordnung zwischen Höhenwert und Farbe vornehmen
Der Höhenwert kann theoretisch zwischen -32768 bis +32767 bzw. zwischen 0 bis 65535 schwanken
In der Praxis gibt es aber einen Minimal und einen Maximalwert.
Der Minimal- und Maximalwert muss über 2 verschachtelte Schleifen, die jeden Wert des Array prüfen, ermittelt werden
4b.) bei bekannten Minimal- und Maximalwerten muss versucht werden diese möglichst sinnvoll auf das vorhandene Farbspektrum umzusetzen ("color mapping").
Dies ist der entscheidende und wichtiste Schritt der ganzen Aufgabe.
Und es ist genau das gleiche Problem, dass sich auch beim Zeichnen der Mandelbrot-Menge stellt.
Man kann z.B. die Höhenwerte gleichmässig auf ein Regenbogenspektrum verteilen.
Problem dabei: kleine Höhenunterschiede bleiben unsichtbar, weil das menschl. Auge Farben die eng zusammenliegen schlecht unterscheiden kann.
Oder man wählt z.B. 32 feste Farben aus und wendet die Modulo-Operation an:
Delphi-Quellcode:
hoehenwert := tunneldata[x,y];
farbe := FarbenArray[hoehenwert mod 32];
Welche Art des color mapping besser ist hängt vom Objekt unter dem Tunnelmikroskop ab.

5.) mit einer 2-fachen Schleife füllt man das Bitmap für jedes Pixel.
Man beginnt dabei zuerst das Bitmap über das Property Pixels[] zu füllen.
Dies ist aber sehr langsam.
Daher sollte man in einem nächsten Schritt den Vorgang über das Property Scanline beschleunigen.
Als unerfahrener Delphiprogrammierer sollte man nicht sofort mit Scanline beginnen sondern zuerst mit der langsamen Methode sicherstellen, dass das color mapping richtig funktioniert!
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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