Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Windows Forms
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2014, 11:47   #1
Любимая
 
Регистрация: 09.05.2013
Сообщений: 6
Восклицание Копирование вырезанного изображения в другой PictureBox / C# Windows Forms

Доброго времени суток.

При разработке приложения столкнулась с проблемой.

Сейчас программа пользователю вырезать прямоугольную область, и изображение в pictureBox1.
необходимо сделать так, чтобы в pictureBox2 подгружался не оригинал изображения, а такая же вырезанная область.

Как это сделать, подскажите пожалуйста.

Код:
namespace WindowsFormsApplication1
{
 
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        [DllImport("user32.dll")]
        public static extern int SendMessage(
               int hWnd,      // handle to destination window
               uint Msg,       // message
               long wParam,  // first message parameter
               long lParam   // second message parameter
               );
 
 
        PictureBox pic = new PictureBox();
        private int begin_x;
        private int begin_y;
        bool resize = false;
        private int scroller_vert = -1;
        private int scroller_hor = -1;
        
 
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                
                System.IO.FileStream fs = new System.IO.FileStream(openFileDialog1.FileName, System.IO.FileMode.Open);
                System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
                fs.Close();
                pictureBox1.Image = img;
 
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            pic.Parent = pictureBox1;
            pic.BackColor = Color.Transparent;
            pic.SizeMode = PictureBoxSizeMode.AutoSize;
            pic.BorderStyle = BorderStyle.FixedSingle;
            pic.Visible = false;
        }
 
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                begin_x = e.X;
                begin_y = e.Y;
                pic.Left = e.X;
                pic.Top = e.Y;
                pic.Width = 0;
                pic.Height = 0;
                pic.Visible = true;
                timer1.Start();
                resize = true;
            }
        }
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                pic.Width = e.X - begin_x;
                pic.Height = e.Y - begin_y;
                
               
                scroller_hor = -1;
                scroller_vert = -1;
               
                if (e.X > panel2.Width - 5)
                { scroller_hor = 0; }
 
                if (e.Y > panel2.Height - 5)
                { scroller_vert = 0; }
 
                
            }
        }
 
 
        static public Image Copy(Image srcBitmap, Rectangle section)
        {
            // Вырезаем выбранный кусок картинки
            Bitmap bmp = new Bitmap(section.Width, section.Height);
            using (Graphics g = Graphics.FromImage(bmp))
            {
                
                g.DrawImage(srcBitmap, 0, 0, section, GraphicsUnit.Pixel);
            }
            //Возвращаем кусок картинки.
            return bmp;
        }
 
 
        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
 
            pic.Width = 0;
            pic.Height = 0;
            pic.Visible = false;
            timer1.Stop();
            if (resize == true)
            {
                if ((e.X > begin_x + 10) && (e.Y > begin_y + 10)) //не дает вырезать маленький кусочек
                {
                    Rectangle rec = new Rectangle(begin_x, begin_y, e.X - begin_x, e.Y - begin_y);
                    pictureBox1.Image = Copy(pictureBox1.Image, rec);
                }
            }
            resize = false;
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (scroller_vert > -1)
            {
                SendMessage(panel2.Handle.ToInt32(), 277, 1, scroller_vert);
            }
            if (scroller_hor > -1)
            {
                SendMessage(panel2.Handle.ToInt32(), 276, 1, scroller_hor);
            }
        }
        
 
 
    }
}
на самом деле главное - это не сдаваться
Любимая вне форума Ответить с цитированием
Старый 14.05.2014, 10:07   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Проект приложите, копнём.
Ну и стоило создать тему в разделе C# , а то я, например, вот только сейчас нашёл тему тут.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows Forms c++ как через кнопку вызвать PictureBox diga666 Windows Forms 1 27.05.2013 14:51
Отрисовка изображения в заданном местоположении на PictureBox AnDrOiD73 C# (си шарп) 4 07.11.2012 20:06
Windows Forms Обработка изображения: сделать пиксель определенного цвета прозрачным revaldo666 Windows Forms 1 23.07.2012 20:40
Изменение изображения picturebox при нажатии на пункт listbox NeedLess Общие вопросы C/C++ 2 28.06.2012 19:43
Изображения в PictureBox Александр Солодун C# (си шарп) 2 24.11.2011 19:24