Я пытаюсь реализовать редактор изображений, я хочу нарисовать изображение поверх существующего изображения в графическом окне. Я добился этого с помощью Graphics.DrawImage и с помощью пункта MouseEventArguments. Но проблема в том, что я хочу прямоугольник выделения, нарисованный поверх изображения, нарисованного при щелчке мыши над ним, и он должен быть перерисован в новой позиции, полученной щелчком мыши, и перетащить мышью (без прямоугольника выделения). Разрисовка изображения в новой позиции работает медленно и требует много памяти, поэтому я использую GC.collect. Пожалуйста, помогите мне осуществить выбор. Я публикую то, что я сделал до сих пор, ниже
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace WindowsFormsApplication32
{
public partial class Form1 : Form
{
Bitmap timg, timg2;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
timg = new Bitmap(pictureBox1.Image);
timg2 = new Bitmap(pictureBox1.Image);
pictureBox1.MouseDown+=new MouseEventHandler(pictureBox1_MouseDown);
pictureBox1.MouseMove+=new MouseEventHandler(pictureBox1_MouseMove);
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button ==MouseButtons.Left)
{
timg = new Bitmap(timg2);
Graphics g = Graphics.FromImage(timg);
g.DrawImage(pictureBox2.Image, new Point(e.X, e.Y));
pictureBox1.Image = timg;
g.Dispose();
GC.Collect();
//pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Graphics g = Graphics.FromImage(pictureBox1.Image);
g.DrawImage(pictureBox2.Image, new Point(e.X, e.Y));
// pictureBox1.Invalidate();
g.Dispose();
GC.Collect();
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
}
}