Laden...

Bilder Skalieren und Drucken ohne Quallitätverlust

Erstellt von MafiaGmbH vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.904 Views
M
MafiaGmbH Themenstarter:in
16 Beiträge seit 2011
vor 8 Jahren
Bilder Skalieren und Drucken ohne Quallitätverlust

Hallo,
ich möchte gerne ein Foto (Hochauflösung z.B. 5184x3456 - 72dpi) mit einem Farbthermodrucker drucken.

Wenn ich das Foto über Windows Fotoanzeige öffne und als 10x15 Bild ausdrucke, dann habe ich super Qualität.

Wenn ich aber mit meiner Software das Bild auf das Format skaliere und drucke, dann sieht das Bild verwaschen aus.

In meiner Software skaliere ich das Bild anhand der Pixel-Größe und da vermute ich auch den Fehler, ich müsste es bestimmt über die dpi anzahl verkleinern, bzw. DPI auf 300 erhöhen und das Bild auf die gewünschte Pixel anzahl skalieren.

Oder was schlägt Ihr mir vor?

Hier ist mein Code Schnipsel wie es z.Z. durchgeführt wird:


private void PrintPage(object o, PrintPageEventArgs e)
{
System.Drawing.Image i = System.Drawing.Image.FromFile("C:\\bild.jpg");
                float newWidth = i.Width * 100 / i.HorizontalResolution;
                float newHeight = i.Height * 100 / i.VerticalResolution;


                float widthFactor = newWidth / e.PageBounds.Width;
                float heightFactor = newHeight / e.PageBounds.Height;

                if (widthFactor > 1 | heightFactor > 1)
                {
                    if (widthFactor > heightFactor)
                    {
                        newWidth = newWidth / widthFactor;
                        newHeight = newHeight / widthFactor;
                    }
                    else //Querformat
                    {
                        newWidth = newWidth / heightFactor;
                        newHeight = newHeight / heightFactor;
                    }
                }
                
                e.Graphics.DrawImage(i, 0, 0, (int)newWidth, (int)newHeight);
}

//Button zum auslösen
private void button1_Click_1(object sender, EventArgs e)
{
            PrintDocument pd = new PrintDocument();
            pd.PrintPage += PrintPage;
            pd.Print();
}

C
2.122 Beiträge seit 2010
vor 8 Jahren

dpi hat mit deinem Vorhaben nichts zu tun. dpi = Punkte pro Strecke auf dem Ausdruck. Wie viele Punkte das sind ist für dich egal denn du willst das Bild so drucken dass es auf den Druckbereich passt. Dementsprechend rechnest du das Bild um.

Warum das nicht gut aussieht kann ich auf ersten Blick nicht sehen. Debug das und sieh dir die Werte an, dann siehst du evtl. gleich ein Problem.

Druck das Bild in seiner Originalgröße aus und schau ob es dann ok ist. Vielleicht hat die Draw Methode ein Problem beim umrechnen der Bilder?

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo MafiaGmbH,

vllt. findest du in Image skalieren liefert schlecht Qualität die Lösung für dein Problem. Schau dir das und die dort verlinkten mal an.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

M
MafiaGmbH Themenstarter:in
16 Beiträge seit 2011
vor 8 Jahren

@chilic
also meine Annahme ist, wen ich das Bild nun mal verkleinere, dass die Bild Information bei gleichbleibenden DPI verloren geht. Daher dachte ich, das ich die DPI anzahl eigentlich erhöhen müsste damit ich auf eine geringere Fläche mehr Punkte drauf bekomme.

Mit Photoshop kann ich auch ein Foto öffnen das z.B. Standard auf 42 DPI bzw. Auflösung steht und kann anschließend über Bild->Bildgröße die Auflösung oder die Größe des Bildes verändern.

Daher sollte es doch gehen irgend wie die Auflösung des Bildes zu verändern?

@gfoidl
vielen dank für den Link, leider hat es nicht geholfen.

ich habe folgendes im meinen Script hinzugefügt ohne Erfolg:


 e.Graphics.InterpolationMode  = InterpolationMode.HighQualityBicubic;
 e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
 e.Graphics.CompositingQuality = CompositingQuality.HighQuality;

C
2.122 Beiträge seit 2010
vor 8 Jahren

dpi ist eine Information wie ein Bild ausgedruckt werden soll - sofern es das bearbeitende Programm interessiert. Da drin steht so viele Pixel sollen auf ein Inch gedruckt werden. Oder bei einem Scan bedeutet es, so viele Pixel waren im Original auf einem Inch.
Dich hindert aber niemand das Bild doppelt so groß oder nur halb so groß auszudrucken.
Mit dem dpi Wert ändert sich nicht die Pixelzahl des Bilds! Nicht verwechseln.
Du sagst ja selbst du kannst Auflösung (im Sinne von dpi) ODER Größe (Pixel) verändern. Das ist nicht das selbe.

Wenn du in deinem Programm selbst das Bild positionierst, bestimmst DU dessen Größe. Nicht der dpi-Wert.

Daher dachte ich, das ich die DPI anzahl eigentlich erhöhen müsste damit ich auf eine geringere Fläche mehr Punkte drauf bekomme.

Das wäre die Auflösung des Druckers. Der bestimmt wie viele Punkte deine Draw Methode auf ein Inch auf dem Papier kriegt.
Wenn du diesen Wert hochsetzt wird das Bild in einem Programm das diese Angabe berücksichtigt kleiner. Denn mehr Pixel pro Inch => weniger Inch. Die Anzahl Pixel erhöhst du damit nicht.

M
MafiaGmbH Themenstarter:in
16 Beiträge seit 2011
vor 8 Jahren

@chilic Ja du hast es recht.
Wie bei Photoshop man sieht, wenn man Auflösung beim einem Bild verändert so wird auch die Abmessung in Pixel (breite & höhe) mit verändert.

Aber die Breite und Höhe des Bildes als z.B. cm bleibt bestehen.

D.h. ich möchte an meinen Drucker großes Bild zusenden, aber dem gleichzeitig sagen der soll z.B. 10x10cm drucken.

Ich möchte gar nicht das Bild runter skalieren damit der Drucker beim Drucken 1:1 eben wie gewünscht druckt, weil dann ist die Qualität schlechter.