Graphics.DrawImage徽标在大图像上缩放不正确

Kev*_*nUK 4 c# graphics

我正在做一些标准代码,我正在为图像应用徽标,它工作正常.

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

徽标在2288 x 1712的某些图像上正确应用.如果我使用3264 x 2448的图像,则在正确的起始坐标处添加徽标,但是在x和y轴上进行.

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

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();
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 9

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

使用指定大小(以像素为单位)的重载:

g.DrawImage(
   logo,
   sourceImg.Width - horizontalPosition - logo.Width,
   sourceImg.Height - verticalPosition - logo.Height,
   logo.Width,
   logo.Height
);
Run Code Online (Sandbox Code Playgroud)