السلام عليكم ..
في الحقيقة أبارك للقائمين على هذا المنتدى جهدهم المبذول وتواصل الأعضاء وتفاعلهم الرائع في هذا المنتدى ..
عندي طلب لو ممكن أحد يساعدني فيه ..
وهو كيف يمكنني عمل أداة لتحديد جزء من الصورة (Selection Tool) (Rubber-band Tool) مثل الأداة الموجودة في برامج الرسم ..
في الحقيقة لي بعض المحاولات وذلك باستخدام الـMouse Events .. ولكن للأسف لم استطع أن اطبقها على صورة موجودة في الـpictureBox ..!!
وهذه هي محاولتي :
public void MyMouseDown( Object sender, MouseEventArgs e )
{
selected = true;
ptOriginal.X = e.X;
ptOriginal.Y = e.Y;
ptLast.X = -1;
ptLast.Y = -1;
}
private void MyDrawReversibleRectangle( Point p1, Point p2 )
{
Rectangle rc = new Rectangle();
p1 = PointToScreen( p1 );
p2 = PointToScreen( p2 );
if( p1.X < p2.X )
{
rc.X = p1.X;
rc.Width = p2.X - p1.X;
}
else
{
rc.X = p2.X;
rc.Width = p1.X - p2.X;
}
if( p1.Y < p2.Y )
{
rc.Y = p1.Y;
rc.Height = p2.Y - p1.Y;
}
else
{
rc.Y = p2.Y;
rc.Height = p1.Y - p2.Y;
}
ControlPaint.DrawReversibleFrame( rc,
Color.Black, FrameStyle.Dashed);
Graphics gr = this.CreateGraphics();
Graphics gm = this.tbThreshold.CreateGraphics();
Graphics ga = this.pictureBox2.CreateGraphics();
Pen p = new Pen(Color.Black);
gm.DrawRectangle(p,ptOriginal.X,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
gr.DrawRectangle(p,ptOriginal.X,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
ga.DrawRectangle(p,ptOriginal.X,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
Image image = this.pictureBox1.Image;
Graphics g = Graphics.FromImage(pictureBox1.Image);
g.DrawRectangle(p,ptOriginal.X ,ptOriginal.Y,ptOriginal.X-ptLast.X,ptOriginal.Y-ptOriginal.Y);
p.Dispose();
g.Dispose();
pictureBox1.Image=image;
}
public void MyMouseUp( Object sender, MouseEventArgs e )
{
selected = false;
if( ptLast.X != -1 )
{
Point ptCurrent = new Point( e.X, e.Y );
MyDrawReversibleRectangle( ptOriginal, ptLast );
MessageBox.Show(ptOriginal.ToString()+" and "+ ptLast.ToString());
}
ptLast.X = -1;
ptLast.Y = -1;
ptOriginal.X = -1;
ptOriginal.Y = -1;
}
public void MyMouseMove( Object sender, MouseEventArgs e )
{
Point ptCurrent = new Point( e.X, e.Y );
if( selected)
{
if( ptLast.X != -1 )
{
MyDrawReversibleRectangle( ptOriginal, ptLast );
}
ptLast = ptCurrent;
MyDrawReversibleRectangle( ptOriginal, ptCurrent );
}
}
protected override void OnLoad(System.EventArgs e)
{
MouseDown += new MouseEventHandler(MyMouseDown );
MouseUp += new MouseEventHandler( MyMouseUp );
MouseMove += new MouseEventHandler( MyMouseMove );
selected = false;
}فهل من معين يساعدني على هذه المشكلة ؟!
مع سابق شكري :)