AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Raster auf Canvas zeichnen
Thema durchsuchen
Ansicht
Themen-Optionen

Raster auf Canvas zeichnen

Ein Thema von cltom · begonnen am 3. Mär 2008 · letzter Beitrag vom 7. Mär 2008
Antwort Antwort
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#1

Raster auf Canvas zeichnen

  Alt 3. Mär 2008, 08:33
Hej DP,

für ein "Zeichenprogramm" möchte ich einen Raster machen. Das "snap-to-grid" geht gut, kein Problem mit dem üblichen (x div raster) * raster. Was jedoch nicht gut läuft, ist die grafische Darstellung. Diese mache ich einfach durch zwei Schleifen.

Delphi-Quellcode:
  for rx := 0 to (img_main.Width div gridsize) do
    for ry := 0 to (img_main.Height div gridsize) do
      img_main.Canvas.Pixels[rx*gridsize,ry*gridsize] := clGrey;
das geht auch, ist aber bei schnellem neuzeichnen (etwa beim bewegen von objekten) ineffizient. das heisst, das neuzeichnen wird extrem verlangsamt. Natürlich auch, sind ja rund 1 Mio. Schleifendurchläufe.

Was wäre effizienter? Ein fertiges Bild mit mehreren Kacheln malen?

danke und ligrü
tom
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Raster auf Canvas zeichnen

  Alt 3. Mär 2008, 13:05
MoveTo
LineTo mit
Pen.Style := psDot; bzw. andere (F1 drücken)!
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#3

Re: Raster auf Canvas zeichnen

  Alt 6. Mär 2008, 05:47
Hej Kroko,

ok, danke. Das verringert natürlich die Zahl der Schleifendurchläufe ganz ordentlich und bringt auch ein wenig (gar nicht so viel wie erwartet) schnellere Reaktion. Leider ist es noch nicht wirklich befriedigend schnell und leider ist es auch nicht ganz das, was geplant war, nämlich einzelne Gitterpunkte, nicht gepunktete Linien.

gibt's noch Alternativen?

danke
tom
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

Registriert seit: 29. Okt 2006
Ort: Düsseldorf
249 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Raster auf Canvas zeichnen

  Alt 6. Mär 2008, 06:29
Falls du auch auf Fremdkomponenten zugreifen würdest, such mal hier im Forum nach TMathBitmap (oder so ähnlich...)
Frank Dumont
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Raster auf Canvas zeichnen

  Alt 6. Mär 2008, 06:40
Man könnte das Raster einmalig erzeugen in ein Offscreen-Image kopieren und dieses vor dem Neuzeichnen in den Canvas kopieren.
Markus Kinzler
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Raster auf Canvas zeichnen

  Alt 6. Mär 2008, 07:43
Würde das auch einmal auf ein Bitmap zeichnen und dann immer nur reinkopieren. Ich würde allerdings den gesamten Zeichenprozess dann auf ein weiteres Bitmap zeichnen und erst wenn das komplett ist das dann auf deinen Ausgabecanvas kopieren. Flackern praktisch null.
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#7

Re: Raster auf Canvas zeichnen

  Alt 6. Mär 2008, 08:00
Hallo,

auf was für eine Komponente zeichnest Du das Raster? Sieht mir nach einem Bitmap aus. Versuch es mal mit einer PaintBox.

Ich habe eine Anwendung, die ein Raster mit 10 Pixeln Abstand auf den Canvas einer Paintbox zeichnet. Bei einer Bildgröße von 1200 mal 1000 Pixeln geht die CPU-Auslastung im Taskmanager mal für eine Sekunde auf 4% hoch. Es ist auch keine Verzögerung zu bemerken. Wenn ich in meinem Zeichenprogramm mit der Maus ein Element verschiebe, wird immer alles neu gezeichnet. Trotzdem läuft die Maus absolut ruckfrei und es wird alles sauber aktualisiert.

MfG

Klaus
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
221 Beiträge
 
Delphi 12 Athens
 
#8

Re: Raster auf Canvas zeichnen

  Alt 7. Mär 2008, 12:12
Danke für Eure Antworten.

Als Zeichenfläche habe ich ein normales TImage. Flackern ist kein Problem, auch nicht, dass der Raster zu lange brauchen würde, das ist beim einmaligen Zeichnen kein Problem. Aber beim verschieben von Objekten (wo ich auch die gesamte Zeichenfläche neu zeichnen lasse), wird's dann sehr langsam.

offscreen zeichnen und reinkopieren klingt vernünftig, das werde ich mal testen.

danke
ligrü
tom
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Raster auf Canvas zeichnen

  Alt 7. Mär 2008, 12:29
Ich würde es auch wie DelphiKlaus mit einer PaintBox versuchen und diese über das Image legen.
Die Paintbox transparent lassen und nur einmalig (und bei Größenänderungen) die Punkte neu zeichnen.
Mausbehandlungen komplett ausschließen (Maus-Transparent).

Dann sind die Punkte optisch für den Nutzer vorhanden, aber berühren nicht Dein eigentliches Bild.

stahli
  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 22:13 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