2009-05-18 32 views
4

我正在做一些标准代码,我将徽标应用于图像并且工作正常。Graphics.DrawImage徽标在大图像上缩放不正确

源图像始终为1024 x 768,因为之前的代码需要图像并调整其大小(根据原始图像创建新文件)。

标志正确地应用于一些图像上,我有2288 x 1712.如果我使用3264 x 2448的图像,那么徽标会添加到正确的开始坐标上,但会进行x和y轴。

徽标之间应有10px的间隙。您可以看到的徽标中的两个字母也远大于源图像徽标。

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

如果我采取的是做了错误的行为(3264 X 2448),并将其更改为2288 X 1712,然后运行该代码的图像,输出正确的结果!

我不明白,因为变量sourceImg始终是1024 x 768版本所以为什么要调整原始图像的大小会产生影响?

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

回答

9

您正在使用的DrawImage的重载采用的图像的PPI值来计算的大小。由于徽标的PPI值低于图像的PPI值,徽标会逐渐放大,以使它们的相对物理尺寸(英寸而不是像素)相同。

g.DrawImage(
    logo, 
    sourceImg.Width - horizontalPosition - logo.Width, 
    sourceImg.Height - verticalPosition - logo.Height, 
    logo.Width, 
    logo.Height 
); 
:在您指定的像素大小

使用过载