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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2011, 03:49   #1
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию Часть скрина сохранить и отобразить на форме

Выделяю на скрине 63 одинаковых зоны. Нахожу и прорисовываю одну из них (прямоугольники с точкой по середине) Сохраняю весь скрин. Вопрос: как правильно отдельно сохранить именно выделенный прямоугольник. Чтобы потом его отобразить на форме. Так понимаю надо создать новый битмап меньшего размера? На примере пожалуйста )
Код:
        private void FindZone(int zona) 
        //Разделяет карту на 63 зоны и задает прямоугольник глобальные параметры Zona63X, Zona63Y, Zona63Width, Zona63Height
        {
            Bitmap bmpScreenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                 Screen.PrimaryScreen.Bounds.Height,
                                 PixelFormat.Format32bppArgb);
            Graphics gScreenShot = Graphics.FromImage(bmpScreenShot);

            gScreenShot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X,
                                       Screen.PrimaryScreen.Bounds.Y,
                                       0, 0,
                                       Screen.PrimaryScreen.Bounds.Size,
                                       CopyPixelOperation.SourceCopy);

            Pen myPen = new Pen(Color.Red, 2);
            int x = Convert.ToInt32(textBox1.Text);
            int y = Convert.ToInt32(textBox2.Text);
            int x2 = Convert.ToInt32(textBox3.Text);
            int y2 = Convert.ToInt32(textBox4.Text);
            int dlina = x2 - x;
            int visota = y2 - y;
            int shagx = dlina / 9;
            int shagy = visota / 7;

            

            //вначале узнаем координату верхнего левого угла каждой клетки
            int a = 0;

            for (int Ypos = 0; Ypos < 7; Ypos++)
            {
                for (int Xpos = 0; Xpos < 9; Xpos++)
                {
                    a++;
                    ZonaCoord[a, 1] = x + shagx * Xpos;
                    ZonaCoord[a, 2] = y + shagy * Ypos;
                    //string text = "#" + Convert.ToString(a) + "  " + Convert.ToString(ZonaCoord[a, 1]) + " : " + Convert.ToString(ZonaCoord[a, 2]);
                    //listBox1.Items.Add(text);
                }
            }
            Zona63X = ZonaCoord[zona, 1];
            Zona63Y = ZonaCoord[zona, 2];
            Zona63Width = shagx;
            Zona63Height = shagy;
            CentrZona63X = Zona63X + Zona63Width / 2;
            CentrZona63Y = Zona63Y + Zona63Height / 2;  




            //for (int b = 1; b < 64; b++)
            //{
            //    gScreenShot.DrawRectangle(myPen, ZonaCoord[b, 1], ZonaCoord[b, 2], shagx, shagy);
            //}
            gScreenShot.DrawRectangle(myPen, Zona63X, Zona63Y, Zona63Width, Zona63Height);
            gScreenShot.DrawRectangle(myPen, CentrZona63X, CentrZona63Y, 2, 2);


            
            myPen.Dispose();
            gScreenShot.Dispose();

            bmpScreenShot.Save("c:\\Skrin.Jpeg", ImageFormat.Jpeg);
            

        }
SaNeKBF вне форума Ответить с цитированием
Старый 23.07.2011, 04:15   #2
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Спасибо, сам нашел решение. Создаем битмам нужного размера. Создаем прямоугольник с положением и размерами для 1ой битмап. Помещаем на 2ю битмап данный прямоугольник и сохраняем. Вот результат:

Код:
            Bitmap region = new Bitmap(Zona63Width, Zona63Height);
            Rectangle rc = new Rectangle(Zona63X, Zona63Y, Zona63Width, Zona63Height);

            using (Graphics g = Graphics.FromImage(region))
            {
                g.DrawImage(bmpScreenShot, 0, 0, rc, GraphicsUnit.Pixel);
            }
            region.Save("c:\\SkrinZoni.Jpeg", ImageFormat.Jpeg);
SaNeKBF вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
webbrowser iframe readystate//oleobject//отобразить часть страницы Jakethefish Работа с сетью в Delphi 2 03.09.2011 19:36
Как отобразить на форме матрицу? (Delphi) havoc Помощь студентам 5 23.03.2011 22:43
Как отобразить картинку из интернета на форме reyn90 Помощь студентам 0 01.06.2009 20:05
Отобразить URL на форме Андреy Общие вопросы Delphi 6 05.12.2008 16:11
Данные сохранить в файл и без перезапуска программы отобразить в grid-e xdevi Помощь студентам 2 29.01.2008 09:17