我在Visual Basic 2010中编写的这个工具应该为图像添加作者文本。用户可以设置字体不透明度和位置。为了方便起见,我想要一些位置预设,如右下角所示。我正在使用的计算是(在这种情况下右下角:
Dim textSize As Size = TextRenderer.MeasureText(tagString + curText, curFont)
tmpPos = New Point(srcImg.Width - textSize.Width - 10, srcImg.Height - textSize.Height - 10)
正如您所看到的,这适用于此示例图片。一些文本只是剪辑出来的地方。
第一个:1024x768 |检测到的字体大小:680x72
第二个:1688x1125 |检测到的字体大小:680x72
我怀疑这与图像的宽高比有关,但我不知道如何修复它。
文字的绘制方式如下:
brush = New SolidBrush(color.FromArgb(alpha, color))
gr = Graphics.FromImage(editImg)
gr.DrawString(tagString + text, font, brush, pos)
HauptBild.Image = editImg
我找到了这个http://www.codeproject.com/Articles/20923/Mouse-Position-over-Image-in-a-PictureBox,它回答了我的问题。
答案 0 :(得分:1)
此问题仅出现在预览中或转换后的文件中吗?请发布代码如何保存新图像。我认为你已经在你的图片框中设置了一个尺寸模式,这就是问题所在。没有sizemode尝试它。
答案 1 :(得分:0)
查看更多代码会更好,但是,正如我在TextRenderer类中理解的那样,它是System.Windows.Forms。只是不要使用从控件创建的图形(我想它是带有sizemode的图片框:缩放),使用图形,而不是从你的图像创建。
这是代码(抱歉,C#),它从文件加载图像,从同一坐标开始绘制文本并放在puctureBox1上。文本始终从Point(100,100)开始。
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.Filter = "Image files|*.jpeg;*.png;*.jpg;*.gif;*.bmp";
if(openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
Bitmap orig=(Bitmap)Bitmap.FromFile(openFileDialog1.FileName);
//workaround for images with color table, see remarks here https://msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage(v=vs.110).aspx
Bitmap bmp=orig.Clone(new Rectangle(0, 0, orig.Width, orig.Height), System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Graphics g = Graphics.FromImage(bmp);
g.DrawString("hello", new Font(this.Font.FontFamily,30,FontStyle.Bold ) , new System.Drawing.SolidBrush(System.Drawing.Color.Yellow ), new Point(100, 100));
this.pictureBox1.Image = bmp;
orig.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("Something goes wrong: " + ex.Message+ "\\n"+ ex.StackTrace );
}
}