Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
1

Выделение части изображения

07.01.2012, 15:06. Показов 4622. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет, пишу скриншоттер. Сам новичок в C#. Суть задачи в том, чтобы выбрать область изображения, которое нужно для работы в дальнейшим. Сначала происходит скрин всего экрана, картинка загружается на форму по всей её ширине. Далее пользователь должен выделить нужную часть изображения. Как это реализовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.01.2012, 15:06
Ответы с готовыми решениями:

Выделение дробной части
Есть ли какая-то функция получения дробной части из числа типа double?

Выделение части двумерного массива
Создать двумерный массив, выделить в нем квадрат с координатами левого верхнего угла(i1,j1) и...

Txt файл, выделение части текста
Доброго времени суток! Подскажите пожалуйста. Есть задача: Txt файл. Необходимо выделить часть...

Класс Fraction (выделение целой и дробной части)
Не получается вывести на экран целую и дробную часть суммы(разности, деления,умножения) дробей....

12
637 / 498 / 77
Регистрация: 28.07.2010
Сообщений: 895
07.01.2012, 15:14 2
Держи, вот, то что нужно тебе! Если что-то непонятно будет - обращайся
Вложения
Тип файла: zip GetScreenshot.zip (112.6 Кб, 285 просмотров)
1
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.01.2012, 15:47 3
Ещё можно сделать, чтобы изображение не мигало при выделении. Нужно использовать BufferedGraphics, BufferedGraphicsContext, BufferedGraphicsManager, Graphics. И 1 раз получать все эти Graphics'ы, а не каждый вызов OnMouseMove, при сворачивании окна вызывать закрытие окна (чтобы не спалиться, что это мы форму растянули на весь экран ). Но этот способ к сожалению тормозной для старых компов (на Athlon XP 3500+ будет заметно как торомзит выделение, так как у меня был такой проц и я писал подобную прогу).

Тьфу, так тут прозрачная форма, я чуть перепутал реализацию. Короче в Windows XP (и то не на каждой винде) были проблемы с этой самой прозрачностью. Писал по другому из-за этого, так что способ возможно не тормозной.

Добавлено через 11 минут
А то сижу смотрю на код и никак не увижу, где же тут рисуется фоновая картинка и картинка внутри прямоугольника.
0
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
07.01.2012, 17:13  [ТС] 4
Спасибо

Добавлено через 1 час 22 минуты
Ребят, а вот мне надо чтобы из одного textBox(a), что находится на первой форме, забить тот текст, что в нем, в string s1 второй формы. Как это реализовать?
В Delphi было так
Form2.EditText...
Тут что-то совсем глухо.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.01.2012, 17:23 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            textBox1.Text = "Текст из первой формы";
            Shown += new EventHandler(Form1_Shown);
        }
 
        void Form1_Shown(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
            form2.SetText(textBox1.Text);
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public partial class Form2 : Form
    {
        private string _text;
 
        public Form2()
        {
            InitializeComponent();
        }
 
        public void SetText(string text)
        {
            _text = text;
        }
    }
1
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
07.01.2012, 17:38  [ТС] 6
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            textBox1.Text = "Текст из первой формы";
            Shown += new EventHandler(Form1_Shown);
        }
 
        void Form1_Shown(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Show();
            form2.SetText(textBox1.Text);
        }
    }
Это в Form1.cs, как я понимаю, а
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  public partial class Form2 : Form
    {
        private string _text;
 
        public Form2()
        {
            InitializeComponent();
        }
 
        public void SetText(string text)
        {
            _text = text;
        }
    }
Во вторую, верно?

Добавлено через 2 минуты
Первый код вставил - ошибка. Блин, как-же на Delphi всё было легко.
Выделение части изображения

(скрин ошибки)
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.01.2012, 18:11 7
Ты не туда код вставил. Вот посмотри на то что ты сделал и задумайся в чём причина. Во-первых надо не тупо весь код пихать в существующий, а нужные части скопировать в похожие места в твоей проге, точнее даже в такие же (хотя названия у тебя могу быть и другие). Хотя по сути, класс то partial, так даже должно работать. А ошибка на скрине вообще говорит совершенно о другом.

Ты вторую форму создал?

Добавлено через 1 минуту
И перенеси ты в свой код нужные части, а не рядом с классом формы ещё один такой же класс формы.

Добавлено через 2 минуты
Цитата Сообщение от KiberQ Посмотреть сообщение
Блин, как-же на Delphi всё было легко.
Ну, если ты не понимаешь, что делаешь. Помоему в шарпе как раз проще, но я тоже после делфи подобные вопросы задавал (правда не сказал бы, что я прям шарил в делфи).

Добавлено через 1 минуту
Вообще позапускай код в отладке и посмотри, что на каком шаге выполняется.

Добавлено через 1 минуту
Цитата Сообщение от KiberQ Посмотреть сообщение
Во вторую, верно?
Да, верно.

Добавлено через 2 минуты
Цитата Сообщение от KiberQ Посмотреть сообщение
Первый код вставил - ошибка.
А-а-а, так ты вставил первый код, не создав вторую форму. Точнее создав но не вставив код второй формы. И пытаешься скомпилировать???

Ну дык наверное надо оба куска кода сначала вставить, вот у тебя и показывается, что в Form2 метод SetText не определён. Ты открываешь Form2, смотришь и там и вправду нету такого метода. Вот примерно какая должна быть логика действий.
1
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
07.01.2012, 18:29  [ТС] 8
А как сохранить изображение в памяти компьютера, а не сохранять напрямую.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.01.2012, 18:34 9
Цитата Сообщение от KiberQ Посмотреть сообщение
А как сохранить изображение в памяти компьютера, а не сохранять напрямую.
Чуть конкретнее задай вопрос. Что сделать хочешь (Для чего в память сохранять)? Изображение это Bitmap?
0
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
07.01.2012, 18:36  [ТС] 10
Да, пишу скриншоттер. Хочу сделать такой принцип работы:
1. Заскринили изображение в png или jpg.
2. Сохранили в памяти компьютера.
3. Открыли в pictureBox1 это изображение из памяти.
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.01.2012, 18:48 11
Покажи код, как получаешь сам скриншот? Точ-в-точ, как в этом проекте, или как? По идее скриншот у тебя и так в памяти находится. Просто передавай его в другую форму, как и текст передавал.
0
1 / 1 / 2
Регистрация: 07.01.2012
Сообщений: 195
07.01.2012, 19:22  [ТС] 12
C#
1
2
3
4
5
6
7
8
9
10
11
void png() //Функции для скриннинга в PNG формате
        {
            string put;
            Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(0, 0, Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, Screen.PrimaryScreen.Bounds.Size);
            put = textBox1.Text;
            bmp.Save(textBox1.Text + @"\FS_"+date+".png", ImageFormat.Png);
            textBox1.Text = put + @"\FS_" + date + ".png";
   
        }
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
08.01.2012, 11:44 13
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Form2 form2;
        public Form1()
        {
            InitializeComponent();
            textBox1.Text = "Текст из первой формы";
            Shown += new EventHandler(Form1_Shown);
        }
 
        private void Form1_Shown(object sender, EventArgs e)
        {
            form2 = new Form2();
            form2.Show();
            form2.SetText(textBox1.Text);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap bmp = ScreenshotMaker.GetScreenshot();
            form2.SetImage(bmp);
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        private string _text;
 
        public Form2()
        {
            InitializeComponent();
        }
 
        public void SetText(string text)
        {
            _text = text;
        }
 
        public void SetImage(Bitmap bitmap)
        {
            pictureBox1.Image = bitmap;
        }
    }
}
0
08.01.2012, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2012, 11:44
Помогаю со студенческими работами здесь

Выделение общей части строковых переменных с учетом ошибок
Задача состоит в том, чтобы из ряда строк выделить те, которые содержат в себе строку Z не более...

Выделение части изображения
Народ, суть в общем следующая. Есть некоторое пятно на чёрном фоне - это исходное изображение....

Обработка части изображения
Всем доброго времени суток, столкнулся с проблемой следующего характера. Есть изображение. Есть...

Поиск части изображения в изображении
Здравствуйте. Имеется картинка, на ней есть некий белый прямоугольник с символами. Как можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru