AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zeichnen eines Rasters mit dem GDI+
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichnen eines Rasters mit dem GDI+

Ein Thema von McDoT · begonnen am 13. Aug 2010 · letzter Beitrag vom 15. Aug 2010
Antwort Antwort
McDoT

Registriert seit: 29. Mär 2010
3 Beiträge
 
Delphi 7 Professional
 
#1

Zeichnen eines Rasters mit dem GDI+

  Alt 13. Aug 2010, 16:51
Hallo an alle,

hat jemand von euch ne Idee, wie man am performantesten mit der GDI+ API von Progdigy ein Raster auf ein TGPBitmap zeichnen kann?

Momentan zeichne ich alles in zwei Schleifen, jeweils eine für die Horizontalen Linien und eine für die Vertikalen Linien. Wenn sich das Raster nicht ändern würde, wäre die Sache ja geklärt. Dann müsste ich es ja nur einmal zeichnen oder ich würde ein gespeichertes Bitmap laden oder so...

Nur leider soll sich das Raster je nach Zoomfaktor und Position der Zeichenfäche ändern.

Code:

Delphi-Quellcode:
// FWidth und FHeight sind Propertys von TWorkspace

procedure TWorkSpace.DrawWorkSpace;
var
  LGraphics: TGPGraphics;
  LBGraphics: TGPGraphics;
  LBitmap: TGPBitmap;
  LCBitmap: TGPCachedBitmap;
begin
  LBitmap := TGPBitmap.Create(FWidth, FHeight);

  LGraphics := TGPGraphics.Create(LBitmap);

  try
    // Hintergrund ausfüllen bzw. alten Inhalt löschen
    LGraphics.Clear(MakeColor(255, 255, 255, 255));

    // hier soll später am anfang das Raster bzw. Grid gezeichnet werden
    DrawGrid(LGraphics);

    LBGraphics := TGPGraphics.Create(FDC);
    LCBitmap := TGPCachedBitmap.Create(LBitmap, LBGraphics);
    try
      LBGraphics.DrawCachedBitmap(LCBitmap, 0, 0);
    finally
      FreeAndNil(LCBitmap);
      FreeAndNil(LBGraphics);
    end;
  finally
    FreeAndNil(LGraphics);
    FreeAndNil(LBitmap);
  end;
end;

// Grid zeichnen
procedure TWorkSpace.DrawGrid(AGraphics: TGPGraphics);
var
  LPen: TGPPen;
  LLinesHori,
  LLinesVerti,
  LCount,
  LLineDistance: Integer;
begin
  LPen := TGPPen.Create(MakeColor(255, 128, 128, 128));
  try
    // Hier müsste ich noch je nach Zoomfaktor den Abstand berechnen,
    // aber ein Fester Wert tuts zum testen auch

    LPen.SetDashStyle(DashStyleDash);
    LLineDistance := 20;
    LLinesHori := FWidth div LLineDistance;
    LLinesVerti := FHeight div LLineDistance;

    for LCount := 0 to LLinesHori - 1 do
    begin
      // eine horizontale Linie zeichnen
      AGraphics.DrawLine(LPen,
                         (LLineDistance * LCount),
                         0, (
                         LLineDistance * LCount),
                         FWidth);
    end;

    for LCount := 0 to LLinesVerti - 1 do
    begin
      // eine vertikale Linie zeichnen
      AGraphics.DrawLine(LPen,
                         0,
                         (LLineDistance * LCount),
                         FWidth,
                         (LLineDistance * LCount));
    end;

  finally
    if Assigned(LPen) then
      FreeAndNil(LPen);
  end;
end;
Ich hab halt das Gefühl, das DrawLine extrem langsam ist... Oder ich benutze es falsch^^

Ich hoffe das ist nicht zu viel Code... Einer meiner ersten Posts hier

Ich habe als Ergebnis ein Visio-ähnliches Raster angestrebt und freue mich natürlich über jeden Vorschlag und Denkanstoß

MfG McDoT

Geändert von McDoT (13. Aug 2010 um 16:54 Uhr)
  Mit Zitat antworten Zitat
McDoT

Registriert seit: 29. Mär 2010
3 Beiträge
 
Delphi 7 Professional
 
#2

AW: Zeichnen eines Rasters mit dem GDI+

  Alt 15. Aug 2010, 09:59
Niemand eine Idee? Oder war es ein Fehler GDI+ und performant in einem Post zu nennen?^^

MfG McDoT
  Mit Zitat antworten Zitat
Florian Hämmerle
(Gast)

n/a Beiträge
 
#3

AW: Zeichnen eines Rasters mit dem GDI+

  Alt 15. Aug 2010, 16:52
Naja, es heißt das GDI+ den Zeichenroutinen von Canvas noch etwas hinterherhinkt, was die Geschwindigkeit angeht.

mfg Florian
  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 23:12 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