if (btn == " 画角 " ){ if (txt_tjsz.Text.Length 0 txt_tjsz.Te

时间:2022-03-18 08:46:52

标签:

在控件加载入图片的根本长进行绘制内容 添加文字

首先就是要确定输入的文字,还有文字的样式。

文字的样式用到了FontDialog控件,获取文字呢,就放个textbox就可以了。如果在输入文字的显示展示文字样式可以TextBox.Font = FontDialog.Font;

fontDialog1.ShowColor = true;  这样fontdialog控件就可以选择字体颜色了。

if (this.fontDialog1.ShowDialog() == DialogResult.OK)
{

  这个 if 判断的是在用户选择字体样式并点击了确定之后。
}

这里实现这个成果的道理,首先固然还是需要一个image图片东西,可以用imagebitmap。然后以这个东西创建一个画布Graphics.FromImage(image);

在初始化一个画笔东西new SolidBrush(this.fontDialog1.Color),这里将画笔的颜色设置为字体样式的颜色。

然后通过画布的 .DrawString()要领在画布的制定位置绘制指定的文本字符串。

画完之后要将绘制的文本显示在图像上,需要通过图片容器pictureBox1.Refresh()要领重绘控件。

因为这个画布是按照这个图片东西创建的,但并不是再次创建一个图片,而是在这个图片东西长进行绘制。所以在控件刷新之后,就会显示绘制后的图片。

再就是需要确定要将文本绘制到图片的阿谁位置

这里就需要确定鼠标的坐标,鼠标点在那里就让文本显示在哪里。

这里使用了picturebox控件的鼠标抬起事件,就是在鼠标在控件上按下抬起之后就会触发。记录一个Point点。

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)//这里这个鼠标抬起事件里参数,e就是鼠标的东西,可以通过这个e获取坐标

  
if
(btn == "文字")//这个判断是因为我还有其他成果使用这个事件实现,所以通过这个String btn判断执行的什么操纵 {   if (txt_tjwz.Text.Length > 0)//这里是判断文本框里有没有输入文本   {     Graphics gra = Graphics.FromImage(pic);//要进行措置惩罚惩罚的图片东西     //Graphics gra = pictureBox1.CreateGraphics();//这里这个画布也可以以控件作为东西绘制     SolidBrush brush = new SolidBrush(this.fontDialog1.Color);//初始化画笔 this.txt_tjwz.ForeColor     gra.DrawString(this.txt_tjwz.Text绘制的字符串, this.fontDialog1.Font字体样式, brush, e.X / Xsfbl按比例缩放后的坐标, e.Y / Ysfbl);//措置惩罚惩罚图片     this.pictureBox1.Refresh();//对显示图片的容器里面的控件刷新,以便及时显示添加的文字(控件中的图像为东西的时候)     bitlist.Add(new Bitmap(this.pictureBox1.Image));//将绘制完成的图片放入调集,供勾销用     txt_tjwz.Text = "";   } }

 添加线段

和添加文字差不久不多,也是首先确定线段的粗细,颜色,在确定绘制线段的位置。因为是线段所以需要确定两点Point

线段的粗细使用textbox让用户输入数字来获取,颜色通过ColorDialog控件,,两点的位置通过两个事件来获取,初始点pt0通过鼠标的按下事件,结束点pt1通过抬起事件

但是还有一个问题,就是这样在确定两点然后绘制告成之前,用户是看不见线段的,所以需要通过鼠标移动事件来实时显示线段的状态。

在用户点下鼠标得到pt0之后,当鼠标移入picturebox控件后就记录鼠标在控件中移动的坐标并绘制线段,因为是鼠标移动就会触发所以会连续绘制,此时就不需要用Refreah()刷新控件了。不然会把鼠标移动所孕育产生的每一条线都记录下来。最后在鼠标遏制确定在一个点绘制后鼠标按键抬起,此时记录最后的坐标并绘制线段。并且按照初始与结束两点计算距离。