Autor Beitrag
Juniorsatan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 05.02.10 20:41 
Ich wage mich aus Gründen meines Abiturs gerade an die graphische Komponente von Delphi ran.

Es geht um die Entwicklung eines eigenen (einfachen) Kompressionsalgorithmus. Dabei habe ich es bisher hinbekommen, die Bitmap zu laden. Leider fangen ab dann aber die Probleme schon an.

ich weiß, dass ich per TBitmap.attach das Bild übergeben kann. Das würde ich gerne an ein Image-Objekt tun, sodass dieses dann in der Form dargestellt wird. Die komplette Unterscheidung zwischen den Properties Image/Graphic/Picture verwirrt mich dermaßen, dass ich nicht weiß, wie ich diese Prozedur nun anwende.

Ich habe mir natürlich auch eine Menge Literatur besorgt, in der ScanLine jedoch bei der Bildbearbeitung nicht verwendet wird, sondern die langsamere Canvas-Methode. Da Perfomance für mein Kompressionsprogramm durchaus eine Bedeutung haben, wollt ich diese ScanLine Funktion benutzen.

Mir leuchtet ein, dass die Funktion zeilenweise die Pixel ausliest. Aber wie werden diese dann gespeichert? In welchem Datentyp? Ist das ein Array? Und wie komme ich an die einzelnen RGB-Komponenten der Pixel dieser Zeile y heran, um mit diesen zu hantieren. Das Wissen dazu fehlt mir und die Bücher, die mir zur Verfügung stehen bieten mir selbst nichts an. Mir fehlt dabei komplett die Vorstellung.

Dank im Vorraus!
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Fr 05.02.10 21:04 
Such einfach mal hier im Forum nach Scanline, da solltest du genug Beispiele zu finden.

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Juniorsatan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Sa 06.02.10 01:58 
Das habe ich bereits getan. Da gehts jedoch schon um konkrete Probleme, und aus deren Code-Schnipseln erschließen sich mir meine Fragen nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 06.02.10 05:54 
Du bekommst bei Scanline einen Pointer auf das erste Pixel. An der Stelle liegen die Werte des Pixels direkt im Speicher.

Beim Pixelformat 24-Bit sind das zum Beispiel drei Byte mit den 3 Farbwerten. Zum Zugriff bietet sich dann ein Pointer auf ein Array mit drei Werten oder einen packed record mit den drei Bytewerten an.

Was in den Quelltexten, die du gesehen hast, passiert ist dann, dass dieser Pointer jeweils erhöht wird. Damit wird er zum nächsten Pixel geschoben und du kannst über das Array oder den Record darauf zugreifen.