在边缘的图像中放置文本

时间:2015-12-17 16:45:08

标签: vb.net image visual-studio-2010 composition aspect-ratio

enter image description here 我在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)

正如您所看到的,这适用于此示例图片。一些文本只是剪辑出来的地方。 enter image description here

第一个: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,它回答了我的问题。

2 个答案:

答案 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 );
        }
    }