Laden...

Imagegrösse ändern (Leeren Hintergrund hinzufügen)

Erstellt von Acer90 vor 7 Jahren Letzter Beitrag vor 7 Jahren 1.854 Views
A
Acer90 Themenstarter:in
12 Beiträge seit 2015
vor 7 Jahren
Imagegrösse ändern (Leeren Hintergrund hinzufügen)

Hallo liebe Community,

Erst einmal mein Code:


Image imgOriginal = Bitmap.FromFile(root + @"\output\" + newIcon + ".png");
double width = 512;
double height = (imgOriginal.Height * width) / imgOriginal.Width;
Image imgnew = new Bitmap((int)width, (int)height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(imgnew);
g.DrawImage(imgOriginal, new System.Drawing.Point[] { new System.Drawing.Point(0, 0), new System.Drawing.Point((int)width, 0), new System.Drawing.Point(0, (int)height) }, new System.Drawing.Rectangle(0, 0, imgOriginal.Width, imgOriginal.Height), GraphicsUnit.Pixel);
imgnew.Save(root + @"\output\resize\" + newIcon + ".png", ImageFormat.Png);

Ich möchte gerne die Auflösung Bildern (PNG mit transparenten Hintergrund) mit der Größe 256x265px auf 512x265 ändern, dabei soll das Bild aber nicht verzerrt werden. Ich möchte also einfach rechts und links leeren Hintergrund hinzufügen.

Habe auch schon gegoogelt und diesen Code gefunden, leider passt es nicht er ändert zwar die Breite, aber auch die höhe. Ein ändern brachte es nur zur einer Verzerrung des Bildes.

Ich hoffe hier kann mir jemand helfen. Danke schon einmal für eure Hilfe:

mfg: Ace

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Acer90,

schau dir die Überladungen von Graphics.DrawImage an. Dort kannst du den "Zielbereich" angegeben, indem das ursprüngliche Bild gezeichnet wird -- da findet dann auch keine Verzerrung, etc. statt. Der Rest der Bildfläche behält dann den Hintergrund bei. Diesen Hintergrund kannst du vorher mit Graphics.Clear setzen.

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!"

A
Acer90 Themenstarter:in
12 Beiträge seit 2015
vor 7 Jahren

Danke,

hier ist meine Lösung 😄


sing (var bitmap = new Bitmap(newwidth, newheight))
{
    bitmap.MakeTransparent();
    using (Graphics graphics = Graphics.FromImage(bitmap))
    {
         graphics.DrawImage(imgOriginal, 128, 0, width, height);  //(source, x, y, width, height)
    }
    try
   {
         bitmap.Save(root + @"\output\resize\" + newIcon + ".png", System.Drawing.Imaging.ImageFormat.Png);
    }
    catch (Exception ex) { }
}

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Acer90,

es ist zwar ein anderes Thema, aber

  
catch (Exception ex) { }  
  

ist nie gut. Wenn du eine Exception (=Ausnahme) nicht behandeln kannst, so fange sie auch nicht und "verschlucke" sie erst recht nicht. Entweder du kannst auf die Ausnahme (angemessen) reagieren, so behandle sie auch, ansonsten fang sie nicht und der Aufrufer ist dafür zuständig, od. falls kein Aufrufer dies behandeln kann letztlich die Laufzeitumgebung selbst.

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!"

A
Acer90 Themenstarter:in
12 Beiträge seit 2015
vor 7 Jahren

Jo hab ich auch schon selber gemerkt 😄

16.842 Beiträge seit 2008
vor 7 Jahren

Pfade bastelt man nicht selbst zusammen. Dafür gibts Path.Combine() 😉