Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer auf canvas.pixels (https://www.delphipraxis.net/6311-pointer-auf-canvas-pixels.html)

lordcroc 6. Jul 2003 13:22


Pointer auf canvas.pixels
 
gibt es eine möglichkeit einen pointer auf das array canvas.pixels[] zu legen um schneller Daten da drin zu speichern. Da ich gerade ein programm geschrieben habe das pcx dateien lesen kann das problem ist halt er ist zu langsam beim bild aufbau.

Christian Seehase 6. Jul 2003 13:32

Moin Lordroc,

schreib die Graphik doch erst einmal auf ein Bitmap Canvas und kopiere es dann mit BitBlt auf die endgültige Zielfläche.

lordcroc 6. Jul 2003 13:48

ich weis zwar nicht ganz genau wie du das meinst, ist das aber nicht ein zusätzlicher schritt. ich wollte direkt aus einer datei lesen und gleich auf ein canvas kopieren, nur es ist mir zu langsam. ich wollte direkt auf den speicher vom canvas zugreifen und die daten schreiben.

Christian Seehase 6. Jul 2003 13:59

Moin Lordroc,

das direkte Schreiben auf einen sichtbaren Canvas dürfte für geringe Geschwindigkeit verantwortlich zeichnen, da dieser dann, wenn ich nicht irre, bei jedem Pixel komplett neu gezeichnet wird.

Schreibst Du hingegegen erst auf einen unsichtbaren Canvas (eben den einer Bitmap), und kopierst dessen Inhalt dann, so muss nur einmal aktualisiert werden.

Ich hoffe mal, dass die Begründung so einigermassen richtig ist, denn so sonderlich intensiv hab' ich mich damit bislang noch nicht beschäftigt.

Dieses Prinzip wird auch bei DoubleBuffered angewendet, um Flackern zu vermeiden.

lordcroc 6. Jul 2003 14:06

hmm, ok ich probier das mal aus. Muss das ein Bitmap canvas sein oder kann es auch ein belibiges array sein und wie kopier das ?

sakura 6. Jul 2003 14:09

Es ist nicht Canvas.Pixels, sonder Bitmap.ScanLine, welches Du nutzen musst, dieses ist eine direkter Pointer zur entsprechenden Speicherstelle und extrem schnell.

...:cat:...

lordcroc 6. Jul 2003 14:19

dann probier ich das mal aus!
danke für die hilfe. ich meld mich wieder wenn ich es ausprobiert habe.

jbg 6. Jul 2003 14:36

Das Canvas.Pixels[] Array nutzt die SetPixel() und GetPixel() WinAPI Funktionen. Damit ist es kein richtiges Array, das realen Speicher belegt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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