Mein Ziel ist es, eine Bilddatei zu nehmen und die Dimensionen auf die nächste Zweierpotenz zu erhöhen, wobei die Pixel so bleiben, wie sie sind (d. h. das Quellbild wird nicht skaliert). Im Grunde genommen wäre das Endergebnis also das ursprüngliche Bild plus zusätzlichen weißen Raum, der sich rechts und unten im Bild erstreckt, sodass die Gesamtabmessungen Potenzen von zwei sind.
Nachfolgend finden Sie meinen Code, den ich gerade verwende. Er erstellt das Bild mit den richtigen Abmessungen, aber die Quelldaten sind aus irgendeinem Grund leicht skaliert und beschnitten.
// Load the image and determine new dimensions
System.Drawing.Image img = System.Drawing.Image.FromFile(srcFilePath);
Size szDimensions = new Size(GetNextPwr2(img.Width), GetNextPwr2(img.Height));
// Create blank canvas
Bitmap resizedImg = new Bitmap(szDimensions.Width, szDimensions.Height);
Graphics gfx = Graphics.FromImage(resizedImg);
// Paste source image on blank canvas, then save it as .png
gfx.DrawImageUnscaled(img, 0, 0);
resizedImg.Save(newFilePath, System.Drawing.Imaging.ImageFormat.Png);
Es scheint, als ob das Quellbild auf der Grundlage der neuen Größenunterschiede der Leinwand skaliert wird, obwohl ich eine Funktion namens DrawImageUnscaled() verwende. Bitte informieren Sie mich, was ich falsch mache.