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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 21:48   #1
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
Восклицание Быстрое 2D рисование(аналог карандаша в Paint)?!?

Я умираю, я не могу ничего найти или просто уже не вижу то что нужно, нужна маааленькая помощь и наводка.

Цель реализовать простой карандаш, как в Паинте.Нашёл нечто вот такое:http://easylab.net.ua/ustroystva-vvoda-i-vyivoda/paint Но оно меня чем то пугает, оно не совершенно, хотя и быстро, и там много непонятных слов.((

Когда я был весел и только приступил к решению поставленной задачи, я использовал простой алгоритм:
1.Реакция Image1 на "опускание" левой кнопки мыши - готовы рисовать.
2.Реакция Image1 на передвижение мыши - закрашиваем пиксели, по которым она ходит Form1->Image1->Canvas->Pixels[X][Y]=нужный нам цвет.
3.Реакция Image1 на "поднятие" левой кнопки мыши - перестали рисовать.

В итоге получил не программу, а инвалида, которая не успевает рисовать нормальную линию, а рисует только отрывистые точки.
Как оптимизировать?! Как ускорить?!? Или вообще подход для моей задачи неверный?! Тогда к чему прибегнуть?! По какому запросу гуглить?!?(((
Ksardas13 вне форума Ответить с цитированием
Старый 09.05.2011, 22:16   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

http://www.codeproject.com/KB/GDI/gdionbitmaps.aspx
и вообще - посмотрите там секцию GDI
(чтобы иметь возможность скачивать исходники примеров, нужно зарегистрироваться).

Added 20:21 CET:
На CodeProject, правда, Borland не очень жалуют, но GDI - оно и в Африке GDI...

Последний раз редактировалось Vago; 09.05.2011 в 22:20.
Vago вне форума Ответить с цитированием
Старый 10.05.2011, 03:20   #3
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Всем кто столкнулся с этой же проблемой:
Цитата:
Когда я был весел и только приступил к решению поставленной задачи, я использовал простой алгоритм:
1.Реакция Image1 на "опускание" левой кнопки мыши - готовы рисовать.
2.Реакция Image1 на передвижение мыши - закрашиваем пиксели, по которым она ходит Form1->Image1->Canvas->Pixels[X][Y]=нужный нам цвет.
3.Реакция Image1 на "поднятие" левой кнопки мыши - перестали рисовать.
Алгоритм идеален, красив и безупречен! Просто вместо медленной и громоздкой Canvas->Pixels[X][Y] используйте Canvas->LineTo(X,Y) в обработчике события движения мыши и Canvas->MoveTo(X,Y) в обработчике события "опускания" клавиши мыши! Сам не верил, пока не попробовал!
Всё работает более чем круто! Ухуууу ^___^
Ksardas13 вне форума Ответить с цитированием
Старый 10.05.2011, 03:54   #4
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

А это для заливки!
Код:
  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
  Canvas->Pen->Color = clRed;
  Form1->Canvas->Brush->Color = clTeal;
  Canvas->Rectangle(10, 10, 165, 60);
  }
  //---------------------------------------
  void __fastcall TForm1::Button2Click(TObject *Sender)
  {
  Form1->Canvas->Brush->Color = clYellow;
  Canvas->FloodFill(30, 30, clRed, fsBorder);
  Form1->Canvas->Brush->Color = clAqua;
  Canvas->FloodFill(3, 30, clRed, fsBorder);
  }

Последний раз редактировалось Ksardas13; 10.05.2011 в 04:06.
Ksardas13 вне форума Ответить с цитированием
Старый 11.05.2011, 17:44   #5
dodoaav
Новичок
Джуниор
 
Регистрация: 10.05.2011
Сообщений: 1
По умолчанию

Для пущей красоты, еще неплохо было бы добавить сглаживание получающейся кривой. Будет медленнее чем lineTo, зато куда симпатичнее.
Например строить Безье по точкам
dodoaav вне форума Ответить с цитированием
Старый 12.05.2011, 07:02   #6
Ksardas13
Форумчанин
 
Регистрация: 24.03.2011
Сообщений: 120
По умолчанию

Хм, тоже идея, но проектик сдавать клиенту в пятницу, так что это пока отложу на потом.
Зато я практически закончил свой Паинт! Разве что ещё осталось добавить имбо инструмент - рисование полигонов(ну по сути кривая линия).))

Так что если у кого есть вопросы по рисованию, задавайте, могу ответить на большую их часть.)))
Ksardas13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Случайным образом определить цвет карандаша и кисти. vedro-compota Мультимедиа в Delphi 3 02.06.2010 13:27
Рисование как в Paint artemavd Общие вопросы Delphi 4 12.02.2010 18:38
Paint Артэс Win Api 4 30.11.2008 02:09
paint ben95 Общие вопросы Delphi 1 30.03.2008 09:27