Autor Beitrag
SammyG
Hält's aus hier
Beiträge: 8

WinXP
Delphi 7 Personal
BeitragVerfasst: Do 22.04.10 09:34 
Hallo Leute,

ich habe ein farbiges Tortendiagramm gebastelt und möchte das auch über einen (PDF-)Drucker ausgeben können. On-Screen funktioniert das 1A, allerdings steht mir beim Druck im Weg, dass beim Zeichnen auf dem TPrinter.Canvas die einzelnen Tortenstücke nicht mit Floodfill gefüllt werden können... (weil die meisten Druckertreiber offenbar nur sehr allgemeine Grafikfunktionen bereitstellen bzw. die Drucker oft nicht gepuffert zu arbeiten scheinen (?))

Die Alternative ein BMP zu zeichnen und dieses dann per BitBlt() oder StretchDIBits() aufs TPrinter.Canvas zu übertragen möchte ich NICHT nutzen - das habe ich getestet: dabei wird das Diagramm dann als Bild im PDF kodiert und nicht als Vektor. Das sieht nicht nur schlecht aus, sondern macht die Datei auch noch unsinnig groß!

Die Zweite Alternative wäre einen eigenen Floodfill-Algorithmus zu bauen, allerdings scheiterte das bei 600 dpi bisher an der Performance (Scanline funktioniert ja leider nur mit BMPs).

Was auf der TPrinter.Canvas funktioniert ist die FillRect-Methode. Ich könnte mir vorstellen, dass das in einer eigenen Floodfill-Funktion nutzbar wäre, allerdings befürchte ich, dass das ebenfalls an der Performance scheitert.

Ich habe ein Beispiel-PDF angehängt, bei dem man das sehen kann. Die Roten Quadrate (per FillRect gezeichnet) sind an den Stellen, an denen das FloodFilling beginnen sollte.

Hat vielleicht noch jemand eine gute Idee, wie das Problem zu lösen ist?

Dank und Gruß,


Sammy
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 22.04.10 09:53 
Wozu brauchst du da ein FloodFill? :shock:

Du kannst doch die zu färbenden Pixel 1A berechnen, ist doch schließlich ein simpler Kreis. :nixweiss:
Ob du da dann vektorbasiert weiterkommst ist nochmal eine andere Sache, denn FloodFill oder sowas arbeitet schließlich erst einmal pixelbasiert.