Wie drucke ich ein Bild mit hoher Auflösung ohne es auf die PaperSize A4 Kind=A4 Height=1169 Width=827 zu verkleinern?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Wie drucke ich ein Bild mit hoher Auflösung ohne es auf die PaperSize A4 Kind=A4 Height=1169 Width=827 zu verkleinern?

    Hallo Leute,

    ich versuche schon seit einiger Zeit mein Problem mit dem drucken zu lösen.

    Ich habe ein DataGridView was (blöderweise) eine Größe von 1280x720 Pixeln hat.
    Ich will es ganz "normal" auf ein A4 Blatt drucken.

    Die einzige Lösung die ich bisher gefunden hatte war das ganze auf die PaperSize von A4 zu skalieren (in dem Fall 1169x ca.658)
    Und das Bild dann mit Drawing2D.InterpolationMode.HighQualityBicubic zu smoothen.

    Dabei werden die dünnen Gridlinien sehr schwammig. Ach kleine Schriftgrößen werden qualitativ miserabel.
    Kurz gesagt der Druck ist nicht akzeptabel.

    Ich frage mich schon die ganze Zeit wofür es die DPI Zahl bei den PrinterSettings gibt und warum wenn ich sie ändere es keinen Effekt auf meine PaperSize hat?

    Dieses Drucken macht mich noch wahnsinnig und es gibt nirgendswo ein gescheites Tutorial zu diesem Thema. Immer nur die "Drucken für Anfänger" Beschreibungen. Wie Drucke ich ein Text oder eine PictureBox. Aber alles immer im Rahmen der A4 PaperSize.


    Hier ein kleiner Auszug aus meier PrintPage Routine:
    (es werden vorher ein paar DefaultPageSettings vorgenommen wie:
    Margins, Color = True und Landscape = True
    und die restlichen Settings aus dem Dialog übernommen [PrintDocument1.PrinterSettings = PrintDialog1.PrinterSettings])


    img ist das original Bild (DataGridView in einem TabPage)

    'CODE
    Dim newheight As Integer = img.Height / img.Width * (e.PageSettings.Bounds.Width - e.PageSettings.Margins.Left - e.PageSettings.Margins.Right)
    Dim bild_klein As New Bitmap(e.PageSettings.Bounds.Width - e.PageSettings.Margins.Right - e.PageSettings.Margins.Left, newheight)

    Dim g As Graphics = Graphics.FromImage(bild_klein)
    g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic

    g.DrawImage(img, New Rectangle(0, 0, bild_klein.Width, bild_klein.Height), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel)

    e.Graphics.DrawImage(bild_klein, e.PageSettings.Margins.Left, e.PageSettings.Margins.Top, bild_klein.Width, bild_klein.Height)

    'CODE ENDE

    Es wäre super cool wenn mir jemand den Zusammenhang mit den DPI und der PaperSize einfach mal kurz erklären könnte. :cursing:
    Willkommen im Forum. :thumbup:

    Entrails schrieb:

    Ich habe ein DataGridView
    Wie drucke ich ein Bild
    Ja was denn nun?
    Willst Du ein Bild drucken
    oder
    willst Du eine Tabelle drucken?
    Ein Bild druckst Du mit .DrawImage(...)
    Wie man eine Tabelle druckt, gugst Du z.B. hier:
    Datatable ordentlich ausdrucken, aber wie?
    Tabelle drucken
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    wie in dem code geschrieben möchte ich ein Bild drucken. Es kann ja sein das ich das virtuelle Bild aus verschiedenen Elementen vorher zusammenbauen will.
    Die Links helfen mir da leider nicht wirklich. Ich will entscheiden können wieviele Pixel er pro cm (oder Inch) drucken soll.

    Entrails schrieb:

    möchte ich ein Bild drucken
    Dann soll es so sein und es wird dann halt wie ein vergrößertes gedrucktes Pixelbild, nicht aber wie eine gedruckte Tabelle aussehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Entrails DPI ist die Auflösung des Druckers, wieviele Dot Per Inch er realisieren kann.
    Wenn Du also Dein Bild mit minimaler Größe und bester Auflösung drucken willst, wird es ca. 21m x 297 mm² groß. (Pixel / DPI in mm umgerechnet).
    Wähle beim Druck eine geeignete Einheit, z.B. e.Graphics.PageUnit = GraphicsUnit.Pixel, dann solltest Du ein wenig mit den Größen spielen und probieren, wo das beste Resultat kommt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!