C# - Bitmap laden -> runterskalieren -> speichern
-
Hallo,
ich möchte ein kleines Konsolenprogramm schreiben welches Bilder einließt, dann runterskaliert und abschließend wieder auf der Festplatte abspeichert.
Ich möchte es selbst implementieren und nicht auf Tools wie ImageMagick zurückgreifen.
Mein Code:
Bitmap orgImage = new Bitmap("C:\\orginal.jpg"); Graphics gimage = Graphics.FromImage(orgImage); Rectangle compressionRectangle = new Rectangle(0, 0,orgImage.Width / 2, orgImage.Height / 2); gimage.DrawImage(orgImage, compressionRectangle); Bitmap newImage = new Bitmap(orgImage.Width / 2, orgImage.Height / 2, gimage); newImage.Save("C:\\neu.jpg", ImageFormat.Jpeg);Das Problem was ich noch habe ist, dass mein Bild immer komplett schwarz ist. Habe ich einen Fehler drin?
Gruß
Denis
-
Anscheinend übernimmt der Konstruktor new Bitmap(orgImage.Width / 2, orgImage.Height / 2, gimage); nicht den Bildinhalt, sondern... siehe Doku

So ungefähr sollte es gehen:
Graphics g = Graphics.FromImage(newImage); g.DrawBitmap(oldImage, width, height);BTW: Skalierung von Rastergrafiken
http://loop.servehttp.com/~vertexwahn/oldwiki/public_html_an_turing/Skalierung von Rastergrafiken.pdf
-
Das Graphics Objekt stellt bei mir keine Methode "DrawBitmap" bereit. Es gibt allerdings die Methode "DrawImage" bei der man die Eckkoordinaten angeben in den das Bild skaliert gezeichnet wird. Aber diese Funktion ist ja, so wie ich das verstanden habe, ausschließlich dafür gedacht, dass Bild skalliert in einem Label oder sonst wo in der GUI auszugeben und nicht um das Image-Objekt ansich zu ändern. Daher passiert da auch nix. Das "new.jpg" sieht genauso aus wie das "orginal.jpg".
Image orgImage = Image.FromFile("C:\\orginal.jpg"); Image newImage = orgImage; Graphics gimage = Graphics.FromImage(orgImage); gimage.DrawImage(newImage, 0, 0, orgImage.Width / 2, orgImage.Height / 2); newImage.Save("C:\\new.jpg", ImageFormat.Jpeg);
-
OK habs noch hinbekommen. So gehts:
Bitmap orgImage = new Bitmap("C:\\orginal.jpg"); Bitmap newImage = new Bitmap(orgImage.Width / 2, orgImage.Height / 2); Graphics gimage = Graphics.FromImage(newImage); Rectangle compressionRectangle = new Rectangle(0, 0, orgImage.Width / 2, orgImage.Height / 2); gimage.DrawImage(orgImage, compressionRectangle); newImage.Save("C:\\neu.jpg", ImageFormat.Jpeg);