我有一个拍摄图像的程序(50px大约50px),对图像执行某些操作并上传它。目前,用户仍然需要截取屏幕截图,打开画颜,裁剪出所需的部分并将其复制到我的程序中。
我希望让用户将某种十字准线拖动到屏幕上的所需位置并释放它,从而使用户更容易/更快。然后,我的程序会截取该区域的一个小屏幕截图(已经知道该怎么做)并使用该屏幕截图执行操作。
问题是,我该怎么做? 如何设置可拖动的十字准线,用户可以将其拖到窗体外的某个位置并将其释放,以指定要使用的程序的屏幕坐标?
答案 0 :(得分:1)
您需要执行以下所有操作:
绘制到桌面非常简单:
using (var g = Graphics.FromHwnd(IntPtr.Zero))
{
g.DrawLine(SystemPens.WindowText, 0, 0, 200, 200);
}
要删除您绘制的内容,您需要使用平台调用来调用InvalidateRect以获取适当的位置。
答案 1 :(得分:0)
这是一个快速而又脏的例子,允许用户左键单击并拖动PictureBox并获取光标下方的图像。但是,当用户快速移动时,它不能很好地更新:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
pictureBox1.Cursor = Cursors.Cross;
}
private Bitmap bmp = null;
private Graphics G = null;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
if (bmp == null)
{
bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
G = Graphics.FromImage(bmp);
}
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
if (bmp != null && G != null)
{
Rectangle rc = new Rectangle(Cursor.Position, new Size(1, 1));
rc.Inflate(pictureBox1.Width / 2, pictureBox1.Height / 2);
G.CopyFromScreen(rc.Location, new Point(0, 0), rc.Size);
pictureBox1.Image = bmp;
}
}
}
}