使用TrackBar在图像上移动字符串



我想在滚动跟踪栏后移动字符串。问题是,上一个字符串与新字符串保持在一起。因此,最终的Image获得了一个不可读的字符串。

Image img;
readonly Image _originalImg;
Graphics imgScale;
public Form(){
    InitializeComponent();
    _originalImg = Image.FromFile("d:\a.jpg");
    img = _originalImg;
    imgScale = Graphics.FromImage(img);
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
    img = null;
    pictureBox1.Image = null;
    imgScale = null;
    img = _originalImg;
    x = trackBar1.Value;
    imgScale = Graphics.FromImage(img);
    imgScale.DrawString(str, font, color, new PointF(x, 0));
    pictureBox1.Image = img;
}

任何人都可以编辑我的代码,以使_originalImg保持新的状态,我可以在图像上看到一个清晰的字符串。预先感谢。

这应该对您有用:

readonly Image _originalImg;
public Form(){
    InitializeComponent();
    _originalImg = Image.FromFile("d:\a.jpg");
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
    pictureBox1.Invalidate();
}
private void pictureBox1_paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(_originalImg, 0, 0);
    e.Graphics.DrawString(str, font, color, new PointF( trackBar1.Value, 0));
}

大致在这里所做的事情,将您的图像绘制到图片框上,并将文本绘制到图片框上。这意味着原始图像将永远不会被修改。

我们还仅在更改某些内容(或通过Windows等进行重新粉刷表单)时更新图像。为了确保图像更新,我们在跟踪栏值更改时致电pictureBox1.Invalidate();

编辑:


由于您不想将图像保存在其他地方,我们可以大大简化这一点:

public Form(){
    InitializeComponent();
    pictureBox1.Image = Image.FromFile("d:\a.jpg");
    pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
    pictureBox1.Invalidate();
}
private void pictureBox1_paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawString(str, font, color, new PointF( trackBar1.Value, 0));
}

这将绘制缩放的图像放大到图像框上,然后在其顶部绘制,我们绘制文本。这意味着图像已缩放,但文本保持在您指定的任何字体大小上。

相关内容

  • 没有找到相关文章

最新更新