![]() |
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.
|
Moin Lordroc,
schreib die Graphik doch erst einmal auf ein Bitmap Canvas und kopiere es dann mit BitBlt auf die endgültige Zielfläche. |
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.
|
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. |
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 ?
|
Es ist nicht Canvas.Pixels, sonder Bitmap.ScanLine, welches Du nutzen musst, dieses ist eine direkter Pointer zur entsprechenden Speicherstelle und extrem schnell.
...:cat:... |
dann probier ich das mal aus!
danke für die hilfe. ich meld mich wieder wenn ich es ausprobiert habe. |
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