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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2011, 21:06   #1
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию Экранная лупа

Добрый день, хочу понять как происходит процесс получения цвета пикселя и отображение его на форме.
Для начала получить и отобразить 9 пикселей под курсором мыши.
Порывшись в интернете нашел только советы.
Получить скрин экрана, с помощью таймера и расположении курсора отслеживать перемещение.
Интересует прекладика. Какую библиотеку подключить, как получать и отображать пиксели на форме ) ?
SaNeKBF вне форума Ответить с цитированием
Старый 18.04.2011, 13:01   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

http://www.codeproject.com/KB/cs/SimpleMagnifier.aspx
http://fruitbox.blogsome.com/2007/11...agnifier-in-c/
Hollander вне форума Ответить с цитированием
Старый 03.05.2011, 15:25   #3
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Спасибо. Помогло! + почитал о создании пейнтбраша и рисовании в фармах.
Код:
      protected override void OnPaint(PaintEventArgs e)
       {
            Graphics pgfx = e.Graphics;
            pgfx.CopyFromScreen(Cursor.Position.X - 10, Cursor.Position.Y - 10, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
            pgfx.DrawImage(bmp, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height);
            this.Invalidate();
        }
Тут мы получаем скрин под мышкой и отображаем на форме.
Теперь меня интересует как получить цвет конкретного пикселя под мышкой.
Например, для рисовании на форме используется кисть. И в ней конкретно задается цвет Pen(Color.Black, 2); в данном случае цвет черный размер кисти 2.
Ну ведь даже черных множество оттенков. Вот и хотелось бы на форме этот пиксель нарисовать идентичный тому что под мышкой. Ну и использовать этот цвет например переведя в int если это целесообразно )

+ проблема с отображением координат мыши на форме.
так не получилось
Код:
label1.Text = "X = " +Convert.ToString(Cursor.Position.X);
потому сделал так

Код:
Using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
static extern bool GetCursorPos(ref Point lpPoint); 

Point defPnt = new Point(); 
GetCursorPos(ref defPnt); 
label1.Text = "X = " + defPnt.X.ToString(); 
label2.Text = "Y = " + defPnt.Y.ToString();
Проблема в том, что лейблы общитываются только тогда, когда форму двигать. А надо при движении мыши )

Последний раз редактировалось SaNeKBF; 03.05.2011 в 17:01.
SaNeKBF вне форума Ответить с цитированием
Старый 04.05.2011, 14:00   #4
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Мне кажется лучше получать координаты курсора по событию OnMouseMove
Hollander вне форума Ответить с цитированием
Старый 05.05.2011, 19:05   #5
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Маус муве отображает картинку и координаты только при движении по форме.
А нужно при любом движении. Может я чтото сделал не так

Код:
        protected override void OnMouseMove(MouseEventArgs e)
        {

            this.label1.Text = "x: " + Convert.ToString(Cursor.Position.X) + "  y: " + Convert.ToString(Cursor.Position.Y);
            Graphics pgfx = Graphics.FromHwnd(panel1.Handle);
            pgfx.CopyFromScreen(Cursor.Position.X - 3, Cursor.Position.Y - 3, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
            pgfx.DrawImage(bmp, panel1.ClientRectangle.X, panel1.ClientRectangle.Y, 9, 9);
            pgfx.SmoothingMode = SmoothingMode.HighSpeed;
        }
Вышел из ситуации поставив это дело в таймер. Но думаю это весьма не правильно. Только как временное решение.

Вопрос 2. Для работы с пикселями экрана использую
Код:
System.Drawing.Bitmap picture = new Bitmap(this.pictureBox1.Image);
Дальше можно получить пиксель по любой координате.
Как загрузить в битмап скрин экрана, не сохраняя его на компьютере как картинку?
SaNeKBF вне форума Ответить с цитированием
Старый 05.05.2011, 19:34   #6
SaNeKBF
Пользователь
 
Аватар для SaNeKBF
 
Регистрация: 17.12.2010
Сообщений: 35
По умолчанию

Пошел таким путем
Код:
            // указываем где будем рисовать
            Graphics pgf = Graphics.FromHwnd(pictureBox1.Handle);
            // получаем скрин экрана
            pgf.CopyFromScreen(Cursor.Position.X, Cursor.Position.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
            // размещаем скрин в указанном месте, с размерами.
            pgf.DrawImage(bmp, pictureBox1.ClientRectangle.X, pictureBox1.ClientRectangle.Y, 16, 16); 
            // сглаживаем с уклоном на скорость отображения
            pgf.SmoothingMode = SmoothingMode.HighSpeed;
            // переходим к части обработки пикселей. // копируем изображение загруженное в pictureBox
            System.Drawing.Bitmap picture = new Bitmap(this.pictureBox1.Image);
            //int newRed, newGreen, newBlue;
            Color pixel;
            int x = Cursor.Position.X;
            int y = Cursor.Position.Y;

            pixel = picture.GetPixel(x, y);

            this.label2.Text = "R: " + Convert.ToString(pixel.R);
            this.label3.Text = "G: " + Convert.ToString(pixel.G); ;
            this.label4.Text = "B: " + Convert.ToString(pixel.B); ;


Ошибка: Ссылка на объект не указывает на экземпляр объекта.
System.Drawing.Bitmap picture = new Bitmap(this.pictureBox1.Image);
Проверил: picture = null

Последний раз редактировалось SaNeKBF; 05.05.2011 в 20:16.
SaNeKBF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графический редактор - zoom(лупа), Delphi vitalatron Помощь студентам 11 18.07.2012 10:12
Экранная клавиатура Кристинка89 Общие вопросы Delphi 7 02.03.2011 23:45
Лупа faustpatron13 Мультимедиа в Delphi 6 02.11.2010 18:53
Как устроена экранная лупа в Win 7? mutabor Общие вопросы Delphi 3 14.01.2010 17:29
Экранная клавиатура aesoem Софт 9 13.03.2009 10:59