Laden...

Bild verkleinern - Ergebnis bleibt schwarz

Erstellt von inva vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.675 Views
I
inva Themenstarter:in
37 Beiträge seit 2007
vor 13 Jahren
Bild verkleinern - Ergebnis bleibt schwarz

hallo,
Ich möchte gern ein Bild verkleiner und abspeichern.

Hierfür verwende ich folgenden Code:


//scale image proportional
        public static Image Resize(Image originalImage, double newWidth_p)
        {
            double dlFaktor = newWidth_p / originalImage.Width;
            double newHeight = dlFaktor * originalImage.Height;
            double newWidth = dlFaktor * originalImage.Width;

            Graphics newGraphics = Graphics.FromImage(originalImage);
            newGraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;

            Bitmap resizedImage = new Bitmap((int)newWidth, (int)newHeight);
            Rectangle DrawingArea = new Rectangle(0, 0, (int)newWidth, (int)newHeight);
            newGraphics.DrawImage(resizedImage, DrawingArea);

            return resizedImage;
        }

Jedoch ist das ouput Bild komplett Schwarz.
Mache ich generell etwas falsch?

Der Aufruf sieht wie folgt aus:



private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog OpenMyFiles = new OpenFileDialog();
            if (OpenMyFiles.ShowDialog() == DialogResult.OK)
            {
                Image currentImage = Image.FromFile(OpenMyFiles.FileName);
               
                Image resizedImage = ImageScale.Resize(currentImage, 480);

                resizedImage.Save(@"C:\Dokumente und Einstellungen\user1\Desktop\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            }
        
        }

Aller Wahrscheinlichkeit nach wird das Weltall von einem Rudel Irrer regiert.

54 Beiträge seit 2010
vor 13 Jahren
Bitmap resizedImage = new Bitmap((int)newWidth, (int)newHeight);
Rectangle DrawingArea = new Rectangle(0, 0, (int)newWidth, (int)newHeight);
newGraphics.DrawImage(resizedImage, DrawingArea);

return resizedImage;

Nur mal so als Frage. Wo füllst du resizedImage?

I
inva Themenstarter:in
37 Beiträge seit 2007
vor 13 Jahren

scheinbar nirgendswo, sonst wärs ja nicht schwarz, aber damit hilfst du mir nicht weiter.
Wenn ich das original Bild nehme (input), dann bringt das DrawImage gar nichts, das Bild ist immernoch genauso groß wie vorher. Also dachte ich, ich müßte ein neues erstellen und mein Graphics Objekt zeichnet dann dessen Inhalt in das angegebene Bild.

Scheinbar nicht.

Aller Wahrscheinlichkeit nach wird das Weltall von einem Rudel Irrer regiert.

54 Beiträge seit 2010
vor 13 Jahren

Probier mal folgendes

        public static Image Resize(Image originalImage, double newWidth_p)
        {
            double dlFaktor = newWidth_p / originalImage.Width;
            double newHeight = dlFaktor * originalImage.Height;
            double newWidth = dlFaktor * originalImage.Width;

            Bitmap resizedImage = new Bitmap((int)newWidth, (int)newHeight);
            Graphics newGraphics = Graphics.FromImage(resizedImage);
            newGraphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;

            Rectangle DrawingArea = new Rectangle(0, 0, (int)newWidth, (int)newHeight);
            newGraphics.DrawImage(originalImage, DrawingArea);

            return resizedImage;
        }
54 Beiträge seit 2010
vor 13 Jahren

Achso. Wenn das noch immer nicht will kanns auch an der Konvertierung liegen, die wir hier bisher ja nicht extra durchführen. Dann einfach noch (Image) vor resizedImage setzen beim erstellen des Graphics-Objektes und beim return.
Dann sollte es aber eigentlich funktionieren.

I
inva Themenstarter:in
37 Beiträge seit 2007
vor 13 Jahren

... alles Klar. DrawImage zeichnet in den aktuellen Graphics kontext. Das macht natürlich sinn.

Danke!

Aller Wahrscheinlichkeit nach wird das Weltall von einem Rudel Irrer regiert.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo inva,

hier findest du die Einstellungen, die für ein hochwertiges Ergebnis wichtig sind: [gelöst] Bitmap-Randproblem beim Verkleinern mit InterpolationMode.HighQualityBilinear

herbivore