Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Polygon schraffieren ohne Brush.Style (https://www.delphipraxis.net/189373-polygon-schraffieren-ohne-brush-style.html)

enigma 7. Jun 2016 08:29

Polygon schraffieren ohne Brush.Style
 
Hallo,

ich möchte ein Polygon schraffieren, ohne Brush.Style zu verwenden, da dies bei einigen Druckern nicht klappt.

Im Internet fand ich folgenden Algorithhmus, der aber nicht funktioniert.
Ich verwende Delphi 2010 und bin für jeden Tipp dankbar ;-)

Code:
procedure HatchSolidDash(ACanvas: TCanvas; const APolygon: array of TPoint;
   HatchColor: TColor; Frequency: integer);
 var
   I, J: integer;
   ClipRgn: HRGN;
   CanvasWidth, CanvasHeight: integer;
 begin
   ClipRgn := CreatePolygonRgn(APolygon[0], Length(APolygon), WINDING);
//Die Werte von APolygon sind hier alle korrekt

   SelectClipRgn(ACanvas.Handle, ClipRgn);
[COLOR="Red"]//ab hier sind alle folgenden Randbereiche (ClipRect.Right, Left, Top, Bottom) = 0[/COLOR]
 
   CanvasWidth := ACanvas.ClipRect.Right - ACanvas.ClipRect.Left;
   CanvasHeight := ACanvas.ClipRect.Bottom - ACanvas.ClipRect.Top;
   ...
 end;
Aufruf von HatchSolidDash:
Code:
HatchSolidDash(metaFileCanvas, arrRinnenSohlePix, clRed, 3);
Dabei ist
Code:
metafile := TMetafile.Create;
metafile.Transparent := True;
metaFileCanvas := TMetafileCanvas.Create(metafile, 0);

arrRinnenSohlePix: Array of TPoint;

Neutral General 7. Jun 2016 08:35

AW: Polygon schraffieren ohne Brush.Style
 
Zeichnest du direkt aufs Druckercanvas oder wie?
Falls ja würde ich alles erst auf einem Bitmap vorzeichnen und dann aufs Druckercanvas kopieren.
Weil die Schraffur besteht spätestens wenn sie mal gezeichnet ist genauso aus Pixeln wie der Rest auch.
Von daher sehe ich in der Hinsicht keinen Grund warum irgendein Drucker das nicht drucken können sollte.

enigma 7. Jun 2016 09:02

AW: Polygon schraffieren ohne Brush.Style
 
Danke für deinen Tipp.

metaFileCanvas := TMetafileCanvas.Create(metafile, 0);
wird sowohl für die Bildschirm-Ansicht als auch fürs Drucken jeweils neu erzeugt.
Meinst du das mit der Bitmap für den Fall Brush.Style := bsBDiagonal ?

Neutral General 7. Jun 2016 09:11

AW: Polygon schraffieren ohne Brush.Style
 
Ich meine sowas:
Delphi-Quellcode:
var bmp: TBitmap;
    metafile: TMetafile;
    metaFileCanvas: TMetafileCanvas;
begin
  metafile := TMetafile.Create;
  metafile.Transparent := True;
  metaFileCanvas := TMetafileCanvas.Create(metafile, 0);

  bmp := TBitmap.Create;
  try
    bmp.Width = 500; // Oder wie groß auch immer
    bmp.Height = 500;
   
    // Polygon mit Schraffur zeichnen
    bmp.Canvas.Brush.Color := clRed;
    bmp.Canvas.Brush.Style := bsCross;
    bmp.Canvas.Polygon([Point(12,2), Point(50,70), Point(150,320), Point(30,90)]);

    metaFileCanvas.Draw(0, 0, bmp); // Bitmap mit Polygon auf Metafilecanvas übertragen.
  finally
    bmp.Free;
  end;
end;


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