我在面板中加载了一个图像。我想用鼠标擦除图像的各个部分(在面板上拖动)。这是加载图像的代码:
private void drawP_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(myImage, new Point(0, 0));
}
我该怎么办? 提前致谢。 更新: 抱歉不说早些时候,我已经设置了另一个图像(image2)作为面板的背景,我希望在擦除myImage(加载上面代码的图像)后看到它。
答案 0 :(得分:1)
您好我会假设您希望此功能像油漆上的橡皮擦一样工作。
您将需要3个活动 1.mousedown - 调用第一个擦除并打开mousemove事件方法。 2.mouseup - 停止mousemove事件方法 3.mousemove - 只是调用擦除方法
代码://部分伪现在我不在Visual Studio中:(
//global vars
bool enable = false;
void erase(Point mousepoint)
{
Point f = (mousepoint.X - yourpanel.left?, mousepoint.Y - yourpanel.top?);
//gets mouse position on accual picture;
yourImageGraphics.fillreactangle( f.X - 10, f.Y+10, 20,20 ,Color.White)
// int X , int Y, width , height, color
}
void mousedown(?)
{
enable=true;
erase(Cursor.Position //but you get this from e?);
}
void mouseup(?);
{
enable=false;
}
void mousemove(?)
{
if (enable)
erase(e.Position?);
}
此外,您似乎必须为您的面板制作图形对象:( 我希望这有帮助,因为问题有点模糊。
答案 1 :(得分:1)
这里我创建了一个简单的例子。当然它可以做得更好,但我只是想知道如何做...所以分享我的结果。
public partial class mainForm : Form
{
private Bitmap image;
private Rectangle imgRect;
public mainForm()
{
InitializeComponent();
BackColor = Color.Chartreuse;
image = new Bitmap(@"C:\image.jpg");
imgRect = new Rectangle(0,0,image.Width, image.Height);
}
private void main_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(image, 0, 0);
}
private void main_MouseMove(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left && e.X < image.Width && e.Y < image.Height)
{
image.SetPixel(e.X, e.Y, Color.Magenta);//change pixel color;
image.MakeTransparent(Color.Magenta);//Make image transparent
Invalidate(imgRect);
}
}
}
...让测试
哈!害怕我删掉了他的眼睛:)。
答案 2 :(得分:0)
笔上的TextureBrush
可用于擦除。
工作示例(image1和image2是相同大小的图像):
Bitmap bmp1;
TextureBrush tb;
Point _LastPoint;
public Form1()
{
InitializeComponent();
this.DoubleBuffered = true;
bmp1 = new Bitmap(@"c:\image1.png");
tb = new TextureBrush(new Bitmap(@"c:\image2.png"));
}
private void Form1_MouseMove(object sender, MouseEventArgs e) {
if (e.Button == MouseButtons.Left) {
if (!_LastPoint.IsEmpty) {
using (Graphics g = Graphics.FromImage(bmp1))
using (Pen p = new Pen(tb, 15)) {
p.StartCap = LineCap.Round;
p.EndCap = LineCap.Round;
g.DrawLine(p, _LastPoint, e.Location);
}
}
_LastPoint = e.Location;
this.Invalidate();
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e) {
_LastPoint = Point.Empty;
}
private void Form1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(bmp1, new Point(0, 0));
}