2009-05-18 6 views
4

Ich mache einige Standard-Code, ich bin ein Logo auf ein Bild anwenden und es funktioniert gut.Graphics.DrawImage Logo Skalierung falsch auf einem großen Bild

Das Quellbild ist immer 1024 x 768, da der Code davor das Bild aufnimmt und seine Größe ändert (erstellt eine neue Datei basierend auf dem Original).

Das Logo wird korrekt auf einige Bilder angewendet, die 2288 x 1712 sind. Wenn ich ein Bild von 3264 x 2448 verwende, wird das Logo an der richtigen Startkoordinaten hinzugefügt, aber auf der X- und Y-Achse.

Das Logo sollte einen Abstand von 10px zwischen den Seiten haben. Die 2 Buchstaben im Logo, die Sie sehen können, sind ebenfalls viel größer als das Quellbildlogo.

alt text http://i40.tinypic.com/13z0gf4.jpg

Wenn ich das Bild nehmen, das das falsche Verhalten tut (3264 x 2448) und ändern Sie sich auf 2288 x 1712 und dann den Code ausführen, gibt es das richtige Ergebnis!

Ich verstehe nicht, weil die Variable sourceImg immer die 1024 x 768-Version ist also Warum sollte die Größenänderung des ursprünglichen Bildes eine Auswirkung haben?

Image sourceImg = Image.FromFile(Path.Combine(filepath,filename)); 
Image logo = Image.FromFile(watermark); 

Graphics g = Graphics.FromImage(sourceImg); 
g.DrawImage(
    logo, 
    sourceImg.Width - horizontalPosition - logo.Width, 
    sourceImg.Height - verticalPosition - logo.Height 
); 
g.Dispose(); 
logo.Dispose(); 

sourceImg.Save(Path.Combine(filepath, filename)); 
sourceImg.Dispose(); 

Antwort

9

Die Überlastung des DrawImage, die Sie verwenden nimmt die PPI-Werte der Bilder auf die Größe zu berechnen. Da der PPI-Wert des Logos niedriger ist als der PPI-Wert des Bildes, wird das Logo so skaliert, dass die relative physische Größe (Zoll statt Pixel) gleich ist.

Verwenden Sie eine Überlastung in dem Sie die Größe in Pixeln angeben:

g.DrawImage(
    logo, 
    sourceImg.Width - horizontalPosition - logo.Width, 
    sourceImg.Height - verticalPosition - logo.Height, 
    logo.Width, 
    logo.Height 
); 
Verwandte Themen