AGB  ·  Datenschutz  ·  Impressum  







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

Pointer auf canvas.pixels

Ein Thema von lordcroc · begonnen am 6. Jul 2003 · letzter Beitrag vom 6. Jul 2003
Antwort Antwort
lordcroc

Registriert seit: 13. Aug 2002
Ort: Braunschweig
137 Beiträge
 
Delphi 7 Professional
 
#1

Pointer auf canvas.pixels

  Alt 6. Jul 2003, 14:22
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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 6. Jul 2003, 14: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
lordcroc

Registriert seit: 13. Aug 2002
Ort: Braunschweig
137 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 6. Jul 2003, 14: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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 6. Jul 2003, 14: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
lordcroc

Registriert seit: 13. Aug 2002
Ort: Braunschweig
137 Beiträge
 
Delphi 7 Professional
 
#5
  Alt 6. Jul 2003, 15: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 ?
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 6. Jul 2003, 15:09
Es ist nicht Canvas.Pixels, sonder Bitmap.ScanLine, welches Du nutzen musst, dieses ist eine direkter Pointer zur entsprechenden Speicherstelle und extrem schnell.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
lordcroc

Registriert seit: 13. Aug 2002
Ort: Braunschweig
137 Beiträge
 
Delphi 7 Professional
 
#7
  Alt 6. Jul 2003, 15:19
dann probier ich das mal aus!
danke für die hilfe. ich meld mich wieder wenn ich es ausprobiert habe.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8
  Alt 6. Jul 2003, 15:36
Das Canvas.Pixels[] Array nutzt die SetPixel() und GetPixel() WinAPI Funktionen. Damit ist es kein richtiges Array, das realen Speicher belegt.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz