我正在做一些标准代码,我正在为图像应用徽标,它工作正常.
源图像始终为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)
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)