2009-05-18 9 views
4

Je fais du code standard, j'applique un logo à une image et ça fonctionne bien.Graphics.DrawImage logo mise à l'échelle incorrecte sur une grande image

L'image source est toujours 1024 x 768 comme le code avant que cela ne prenne l'image et la redimensionne (crée un nouveau fichier basé sur l'original).

Le logo est appliqué correctement sur certaines images que j'ai 2288 x 1712. Si j'utilise une image de 3264 x 2448 alors le logo est ajouté aux bons coordonnées de départ mais continue sur les axes x et y.

Le logo doit avoir un écart de 10 pixels entre les côtés. Les 2 lettres du logo que vous pouvez voir sont également beaucoup plus grandes que le logo de l'image source.

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

Si je prends l'image qui fait le mauvais comportement (3264 x 2448) et changer à 2288 x 1712 et puis exécutez le code, il affiche le résultat correct!

Je ne comprends pas parce que la variable sourceImg est toujours la version 1024 x 768 donc pourquoi le redimensionnement de l'image originale aurait-il un impact?

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(); 

Répondre

9

La surcharge du DrawImage que vous utilisez prend les valeurs PPI des images pour calculer la taille. Comme la valeur PPI du logo est inférieure à la valeur PPI de l'image, le logo est mis à l'échelle de sorte que leur taille physique relative (pouces au lieu de pixels) sont les mêmes.

Utilisez une surcharge vous permet de spécifier la taille en pixels:

g.DrawImage(
    logo, 
    sourceImg.Width - horizontalPosition - logo.Width, 
    sourceImg.Height - verticalPosition - logo.Height, 
    logo.Width, 
    logo.Height 
); 
Questions connexes