gpt4 book ai didi

c# - 在运行时向图像添加注释

转载 作者:行者123 更新时间:2023-11-30 19:59:29 24 4
gpt4 key购买 nike

我正在尝试开发一个简单的应用程序(C#、WinForms、Visual Studio 2013),它能够:

1) 从硬盘加载图像;

2) 为图片添加注释并保存修改(换句话说,用户可以在运行时在图像上(在任何地方)绘制字符串)。

为了加载我所做的图像:

private void LoadButton_Click(object sender, EventArgs e)
{
OpenFileDialog theDialog = new OpenFileDialog();
theDialog.Title = "Open Image File";
theDialog.Filter = "Image Files|*.jpg;*jpeg;*.png;*.gif;*.bmp;*.tiff;";
theDialog.InitialDirectory = @"C:\";
if (theDialog.ShowDialog() == DialogResult.OK)
{
pictureBox.Image = Image.FromFile(theDialog.FileName);
}
}

但我不知道如何完成第二个任务。

任何帮助都会很棒。

最佳答案

使用 Graphis.DrawString method在指定位置添加文本(指定颜色、字体系列、字体大小等):

try
{
var image = Image.FromFile("d:\\temp\\image.jpg");
using (var graphics = Graphics.FromImage(image))
{
var font = new Font(FontFamily.GenericSansSerif, 16.0f);
graphics.DrawString("copyright 2014", font, Brushes.Red, new Point(10, 10));
}
image.Save("d:\\temp\\image_copyright.jpg");
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}

原图:

enter image description here

加上文字:

enter image description here

如果可能(且适当),请始终尝试将 Graphics 对象的创建包装在 using 语句中。使用 Graphics.FromImage method从现有图像创建图形对象(如您的情况)。这样,不再需要的对象的处理将由框架自动为您完成。使用 Point 对象将文本放在所需位置,其中 (0,0) 是图像的左上角。


更新

如果您想在 PictureBox 中的自定义位置添加文本,则绑定(bind) PictureBox.MouseClick 事件,将坐标转换为客户端坐标,使用转换后的鼠标坐标将文本定位在图像上并刷新 PictureBox 控件,在图像被修改后:

private void pictureBox_MouseClick(object sender, MouseEventArgs e)
{
var text = !String.IsNullOrEmpty(textBox.Text) ? textBox.Text : "copyright 2014";
var imageCoordinates = translateStretchImageMousePosition(new Point(e.X, e.Y));
using (var graphics = Graphics.FromImage(pictureBox.Image))
{
var font = new Font(FontFamily.GenericSansSerif, 16.0f);
graphics.DrawString(text, font, Brushes.Red, imageCoordinates);
}
pictureBox.Refresh();
}

输出是:

enter image description here

由于 PictureBox 具有不同的图像大小调整模式,因此您需要以不同方式计算点击坐标。 CodeProject article 中显示了如何执行此操作.您也可以尝试使用不同的 client coordinate translation functions由 .NET 框架提供。

关于c# - 在运行时向图像添加注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23846178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com