Zunächst einmal: Frohes Neues Jahr!
In meinem Beitrag
Formular (WinForm) drucken oder als Bitmap speichern möchte ich Bitmaps drucken; das klappt inzwischen auch sehr gut mit vielen denkbaren Varianten.
Aufgabe: Ein maximiertes Formular soll bei Bedarf auf Seitengröße reduziert werden.
Problem: Die Umrechnung von Zoll (Seitenformat) auf Pixel (max. Bitmap-Größe) klappt nicht wie gewünscht.
Ich möchte (wenn möglich) das Bitmap vor dem Drucken auf die passende Größe reduzieren; dazu verwende ich u.a. die Methode GetThumbnail() aus Listbox für Bilder. Weil es vor dem Drucken erledigt werden soll, kann ich nicht Graphics des Druckers benutzen; deshalb helfen mir die Ergebnisse der Suche nicht weiter.
Lösungsversuche:
PrintDocument doc ...
doc.OriginAtMargins = true;
PageSettings stg = doc.DefaultPageSettings;
// compare PaperSize and bmp size:
// maximum horizontal and vertical
float maxX = ( stg.PaperSize.Width - stg.Margins.Left - stg.Margins.Right );
float maxY = ( stg.PaperSize.Height - stg.Margins.Top - stg.Margins.Bottom );
// Versuch 1: Bildschirmauflösung 75 dpi
float bmpX = maxX * 75 / 100;
float bmpY = maxY * 75 / 100;
// Versuch 2: ohne weitere Umrechnung
// float bmpX = maxX;
// float bmpY = maxY;
// check if bmp size is larger than PaperSize
if ( (bmp.Width > bmpX) || (bmp.Height > bmpY) )
bmp = GetThumbnail(bmp, (int)bmpX, (int)bmpY);
Die Zahl 100 kommt von der Standardeinheit bei PageSettings und Margins.
Der Versuch 1 berücksichtigt, dass laut NET-Doku der Bildschirm mit 75 dpi Auflösung gerechnet wird. Der Ausdruck wird aber tatsächlich deutlich zu klein.
Der Versuch 2 ist nur ein unbegründeter Versuch. Tatsächlich wird der Ausdruck auf meinem Drucker mit speziellen Rändern fast sauber gedruckt; es fehlen am rechten Rand nur einige wenige Pixel.
Wenn Ihr noch mehr Informationen benötigt, erläutere ich es gerne.
Habt Ihr Ratschläge für mich? Danke! Jürgen
maxX * 75 / 100; ???
Drucker = 75
Screen = 96
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Danke, das macht Sinn. (Das würde auch das Ergebnis meines 2. Versuchs erklären.) Irgendwo hatte ich im Zusammenhang mit dem Bildschirm etwas gelesen und daraus abgeleitet, dass 75 dpi richtig wären.
Bis zum nächsten Mal viele Grüße! Jürgen