我正在做一些标准代码,我正在为图像应用徽标,它工作正常。
源图像始终为1024 x 768,因为之前的代码会获取图像并调整其大小(根据原始图像创建新文件)。
徽标在2288 x 1712的某些图像上正确应用。如果我使用3264 x 2448的图像,则会在正确的起始坐标处添加徽标,但会在x和y轴上进行。
徽标两侧之间应有10px的间隙。您可以看到徽标中的2个字母也远大于源图像徽标。
如果我拍摄的图像行为错误(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();
答案 0 :(得分:9)
您正在使用的DrawImage
的重载采用图像的PPI值来计算大小。由于徽标的PPI值低于图像的PPI值,徽标会按比例放大,以使其相对的物理尺寸(英寸而不是像素)相同。
使用指定大小的重载:
g.DrawImage(
logo,
sourceImg.Width - horizontalPosition - logo.Width,
sourceImg.Height - verticalPosition - logo.Height,
logo.Width,
logo.Height
);