AGB  ·  Datenschutz  ·  Impressum  







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

ChartView drucken

Ein Thema von blondervolker · begonnen am 29. Dez 2012 · letzter Beitrag vom 30. Dez 2012
Antwort Antwort
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#1

AW: ChartView drucken

  Alt 30. Dez 2012, 10:03
Ich weiß, daß Pozentrechnung, Verhältnisrechnung und Dreisatz (alles dasselbe) das schwierigste im Leben ist - aber auch das einzige aus der Schul-Mathe, was man im Leben wirklich braucht

Um eine Grafik (hier BMP) mit canvas proportional auf einem Endgerät (Bildschirm, Drucker ...) auszugeben, müssen die Zielabmessungen BxH auch dieselben Proportionen wie die der Quelle (deine BMP) haben.

Du hast als Quell-Abmessungen bmp.Width und bmp.Height.
Die Zielabmessungen sind ...StretchDraw(Bounds(Einfx,Einfy,Zielbreite,Zielhöhe)...

Die Bedingung für proportionale Ausgabe ist:
bmp.Width / bmp.Height = Zielbreite / Zielhöhe
in den jeweiligen Einheiten (s.a. Angehängte Abb.).

1)
Normalerweise gibt man eine Ziel-Abmessung vor, z.B. die Breite. Dann muss die Höhe aus den Proportionen errechnet werden:

Aus bmp.Width / bmp.Height = Zielbreite / Zielhöhe folgt
Zielhöhe = Zielbreite * bmp.Height / bmp.Width

also Printer.Canvas.StretchDraw(Bounds(Einfx,Einfy,Ziel höhe,Zielbreite * bmp.Height div bmp.Width), bmp);

oder Printer.Canvas.StretchDraw(Bounds(2000,2000,2000,2 000 * bmp.Height div bmp.Width), bmp);

(Bei Höhe als Vorgabe umgekehrt).

2)
... kann man auch einen Vergrößerungs/Verkleinerungsfaktor vorgeben, dann ist
Zielbreite = bmp.Width * Faktor
Zielhöhe = bmp.Height * Faktor

3)
... oder 1:1 Ausgabe
Zielbreite = bmp.Width
Zielhöhe = bmp.Height

Nur: beide Werte des Zieles willkürlich vorgeben stretcht das Bild eben in diese Vorgaben und es wird verzerrt/gestretcht. Deshalb heißt die Procedure auch StretchDraw, weil sie das Bild eben gnadenlos an die Vorgabewerte anpaßt (s.a. Angehängte Abb.).

Anm: Bezeichnungen wie "Zielhöhe" etc. müssen logo in Syntaxgerechte Bezeichner umgesetzt werden
Angehängte Grafiken
Dateityp: gif chart2.gif (22,4 KB, 6x aufgerufen)

Geändert von MeierZwoo (30. Dez 2012 um 10:15 Uhr)
  Mit Zitat antworten Zitat
MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#2

AW: ChartView drucken

  Alt 30. Dez 2012, 10:52
Noch zwei Anmerkungen:

1)
Die Berechnung mit Ganzzahlen führt automatisch zu Ungenauigkeiten. Ich persönlich arbeite deshalb für alle Abmessungen und x/y-Werte mit Gleitkommatypen, die dann gerundet eingefügt werden. Das ergibt dann maximal 1 Drucker-Pixel Ungenauigkeit in jeder Achse.

Ausnahme: Punkt 2), ganzzahliger Faktor, aber nur bei Vergrößerung oder Punkt 3), 1:1.

2)
Im obigen Beispiel ist ein AspektRatio <> 1:1 des Druckers (Endausgabegerätes) nicht berücksichtigt. Da die meisten Blattdrucker ein Ratio 1:1 haben, ist es auch evtl. unwesentlich, solange der eigene, bekannte Drucker verwendet wird. Aber bei unbekannten (fremden) Druckern sollte man den Ratio doch mit einbauen.

Den Ratio erhält man aus LOGPIXELSX und LOGPIXELSY bzw. ASPECTX und ASPECTY aus den DeviceCaps des Printers (Die Werte, die man ja auch für die Berechnung x/y-Werte in Maßeinheiten (mm, cm, inch) benötigt).
  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 00:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz