Как получить координаты пользовательского курсора изображения в C #? - PullRequest
1 голос
/ 07 сентября 2011
 Bitmap hh = (Bitmap)System.Drawing.Bitmap.FromFile("example.png");
 Graphics.FromImage(hh);
 IntPtr ptr = hh.GetHicon();
 Cursor c = new Cursor(ptr);
 this.Cursor = c;

Я использую этот код для создания пользовательского курсора изображения. Я хочу получить координаты этого пользовательского курсора изображения при событии Click. Таким образом, эти координаты можно использовать для рисования изображения этого курсора в графическом окне при нажатии на изображение, загруженное в графическое поле. Я делаю это в C #.

Я попробовал другой подход

public partial class Form1 : Form
{
    private Bitmap _bmp = new Bitmap(250, 250);

    public Form1()
    {
        InitializeComponent();

        panel1.MouseDown += new MouseEventHandler(panel1_MouseDown);
        panel1.Paint += new PaintEventHandler(panel1_Paint);

        using (Graphics g = Graphics.FromImage(_bmp))
            g.Clear(SystemColors.Window);
    }

    private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        Point mouseDownLocation = new Point(e.X, e.Y);
        label1.Text = mouseDownLocation.X.ToString();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawImage(_bmp, new Point(0, 0));
    }

    private void panel1_MouseDown(object sender, MouseEventArgs e)
    {
        using (Graphics g = Graphics.FromImage(_bmp))
        {
            g.DrawString("Mouse Clicked Here!", panel1.Font, Brushes.Black, e.Location);
        }
        panel1.Invalidate();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        panel1.Image.Save(@"C:\test.jpg", ImageFormat.Jpeg);
    }

Но когда я пытаюсь сохранить изображение, я получаю исключение: Ссылка на объект не установлена ​​на экземпляр объекта .

Обратите внимание, что panel1 в приведенном выше коде относится к графическому блоку

Ответы [ 2 ]

2 голосов
/ 07 сентября 2011

Чтобы получить координаты мыши на PictureBox, вы не должны обрабатывать событие OnClick, но OnMouseDown, например, следующим образом:

private void pb_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
{
  Point mouseDownLocation = new Point(e.X, e.Y);
}

теперь у вас есть mouseDownLocation, который содержит координатыВы искали.

1 голос
/ 08 июня 2013

Я знаю, как получить координату мыши, вы можете кодировать ее как

Cursor.Position.X и Cursor.Position.Y, чтобы получить координату под мышью

...