Ich habe ein SW-Bitmap als image1:
www.toenne-online.de/Pics/sw-1.jpg
Mittels folgender Routine sollen die Farbwerte der Pixel zunächst in ein Array 'Farbwert' geschrieben werden und anschliessend als ASCII-Datei mit 3D-Koordinaten (Format X,Y,Z) gespeichert werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| for y := 0 to image1.Picture.Bitmap.Height-1 do begin pFarbe := image1.Picture.Bitmap.ScanLine[y]; for x := 0 to image1.Picture.Bitmap.width -1 do begin Farbwert[X,Y] := pFarbe^.rgbRed; inc(pFarbe); end; end;
if SaveDialog1.Execute then begin AssignFile(F,SaveDialog1.FileName); Rewrite(F); for y := 0 to image1.Picture.Bitmap.Height-1 do begin for x := 0 to image1.Picture.Bitmap.width-1 do begin str(Farbwert[X,image1.Picture.Bitmap.Height - Y]/25:5:3,StringDummy); StringDummy := inttostr(x) + ',' + inttostr(y) + ',' + StringDummy; writeln(F,StringDummy); end; end; CloseFile(F); end; |
In einem anderen Programm kann ich diese Datei einlesen und als Punktewolke/Drahtgittermodell/Flächenmodell darstellen (das Prog funktioniert auch, da liegt nicht der Fehler).
Das Ergebnis:
www.toenne-online.de/Pics/sw-2.jpg
Die Abmessungen von Quelle und Ziel sind identisch, hatte also die Ursprungsdatei 200x100 Pixel so werden im anderen Programm auch 200x100 Punkte dargestellt. Nur wird das erste Drittel des Ursprungsbild hinten wieder angehängt und die Höhe um eben jenes drittel verzerrt.
Kann mir mal jemand auf die Sprünge helfen wo mein Denkfehler ist?
Danke & Gruss
Toenne