Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 06.11.2018, 14:19   #1
Anton_Jag
Пользователь
 
Регистрация: 06.11.2009
Сообщений: 30
Репутация: 10
По умолчанию Рисование мышкой на PictureBox

Пытаюсь сделать графический редактор типа Пейнт.
Возникла проблема с отрисовкой на PictureBox.Image
Пробовал рисовать двумя способами - оба по событию мыши MouseMove - первое использует Graphics.DrawLine() второе Graphics.FillRectangle
В первом случае получается елочка при движении не перпендикулярно осям, во втором - тормоза - не успевает отрисовывать, получаются отдельные точки при быстром движении мыши. Вопрос - можно ли как то адекватно реализовать рисование жирными линиями?
Код:

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {// зажата левая кнопка
            if (e.Button == MouseButtons.Left)
            {// если операция карандаш или кисть
                if (CurrentOp == operation.None || CurrentOp == operation.brush)
                {
                    Graphics g = Graphics.FromImage(pictureBox1.Image);
                    Brush Br = new SolidBrush(CurrentColorPB.BackColor);
                    // то рисуем на картинке
                    PaintRect.Location = e.Location;
                    g.FillRectangle(Br, PaintRect);
                    //g.DrawLine(WhitePen, PreviousPoint, e.Location); -  2 способ
                    Br.Dispose();
                    pictureBox1.Refresh();
                    //PreviousPoint = e.Location;
                }

Изображения
Тип файла: png 2018-11-06 12_58_11-Графический редактор.png (19.7 Кб, 21 просмотров)
Тип файла: png 2018-11-06 13_18_40.png (22.5 Кб, 21 просмотров)
Anton_Jag вне форума   Ответить с цитированием
Старый 06.11.2018, 23:46   #2
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 751
Репутация: 241
По умолчанию

Во-первых, заводите отдельный битмап, который храните в памяти, и по таймеру его выставляете на экран.
Код:

        
pictureBox2->Image = (Bitmap)internal_bitmap.Clone();

Во-вторых, для рисования отдельных точек нужно использовать не Graphics, а Bitmap.SetPixel.

Код:

void OnMouseMove(sender, args)
{
     if(args.Pressed)
     {
         internal_bitmap.SetPixel(args.Location, CurrentColor);
     }
}

__________________
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума   Ответить с цитированием
Старый 06.11.2018, 23:48   #3
New man
Участник клуба
 
Регистрация: 24.01.2011
Сообщений: 751
Репутация: 241
По умолчанию

У Вас изменение Bitmap и отрисовка должны быть независимы.
__________________
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума   Ответить с цитированием
Старый 08.11.2018, 16:24   #4
Anton_Jag
Пользователь
 
Регистрация: 06.11.2009
Сообщений: 30
Репутация: 10
По умолчанию

А как тогда если я хочу рисовать линию в 10 пикселей? Получается нужно все равно писать свой Fill вокруг текущих координат мыши с радиусом в 10. Разве это быстрее будет работать чем встроенные функции? При рисовании DrawLine с Pen толщиной 1 или 2 проблем нет все работает быстро и рисует то что надо. Проблемы возникают когда размер пера увеличивается. Допустим если Pen равен 5 пикс, то мой алгоритм будет рисовать линиями длинной в пять(отсюда и елочка) и во втором случае закрашивать круги радиусом пять, но с тормозами.
Anton_Jag вне форума   Ответить с цитированием
Ответ

Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ рисование в pictureBox VIK_aka_TOR Помощь студентам 0 30.03.2012 01:10
Рисование мышкой Victor1963 Общие вопросы Delphi 0 01.07.2011 21:33
Рисование мышкой Victor1963 Помощь студентам 2 19.04.2011 12:43
Рисование мышкой Victor1963 Помощь студентам 0 13.04.2011 19:28
Рисование мышкой vandrouny Win Api 1 03.10.2010 19:57


14:54.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru