Ris*_*han 24 c# algorithm image-processing winforms
在搜索自动将水印添加到互联网图像的解决方案时,我找到了stackoverflow中的最佳解决方案.问题的链接是C# - 通过特殊方式为照片添加水印.我特别感谢 Alex Maslakov和漂泊.
我通过一些修改实现了该解决方案,我想将水印放在图像的中心.我修改了adrift提供的解决方案,如下所示
private void button1_Click(object sender, EventArgs e)
{
using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"))
using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png"))
using (Graphics imageGraphics = Graphics.FromImage(image))
using (Brush watermarkBrush = new TextureBrush(watermarkImage))
{
int x = (image.Width - watermarkImage.Width)/2;
int y = (image.Height - watermarkImage.Height)/2;
imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), watermarkImage.Size));
image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg");
}
}
Run Code Online (Sandbox Code Playgroud)
但水印未正确放置在图像中心(见下图).

请纠正我......
谢谢
Ris*_*han 20
最后我找到了问题的解决方案......
更正后的代码答案如下
private void button1_Click(object sender, EventArgs e)
{
using (Image image = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"))
using (Image watermarkImage = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\watermark.png"))
using (Graphics imageGraphics = Graphics.FromImage(image))
using (TextureBrush watermarkBrush = new TextureBrush(watermarkImage))
{
int x = (image.Width / 2 - watermarkImage.Width / 2);
int y = (image.Height / 2 - watermarkImage.Height / 2);
watermarkBrush.TranslateTransform(x, y);
imageGraphics.FillRectangle(watermarkBrush, new Rectangle(new Point(x, y), new Size(watermarkImage.Width+1, watermarkImage.Height)));
image.Save(@"C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg");
}
}
Run Code Online (Sandbox Code Playgroud)
感谢Furqan Safdar和Abdias Software 使用C#中的TextureBrush在不同高度开始的平铺图像链接问题也帮助我解决了这个问题
并感谢所有人
终于结果了

小智 7
你原来的配方很好,顺便说一句.
你确定两者的分辨率是一样的吗?将水印图像的DPI分辨率设置为等于图像:
watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY);
Run Code Online (Sandbox Code Playgroud)
(从我的头脑,但我认为属性名称是正确的).
更新:
从图像更改为位图以便使用SetResolution()- 查看此更改是否适合您 - 我已更改水印在图像上的绘制方式:
private void button1_Click(object sender, EventArgs e) {
using (Bitmap image = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\Desert.jpg"))
using (Bitmap watermarkImage = Bitmap.FromFile("C:\Users\Public\Pictures\Sample Pictures\watermark.png"))
using (Graphics imageGraphics = Graphics.FromImage(image))
{
watermarkImage.SetResolution(imageGraphics.DpiX, imageGraphics.DpiY);
int x = ((image.Width - watermarkImage.Width) / 2);
int y = ((image.Height - watermarkImage.Height) / 2);
imageGraphics.DrawImage(watermarkImage, x, y, watermarkImage.Width, watermarkImage.Height);
image.Save("C:\Users\Public\Pictures\Sample Pictures\Desert_watermark.jpg");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27954 次 |
| 最近记录: |