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

时间:2009-05-18 16:35:40

标签: c# graphics

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

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

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

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

alt text

如果我拍摄的图像行为错误(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();

1 个答案:

答案 0 :(得分:9)

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

使用指定大小的重载:

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