Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.10.2013, 16:15
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
Вопрос Сглаживание на "канве" в Delphi

Всем доброго времени суток. Прошу помощи по вот такому вопросу:
Решил сделать небольшой календарик, на форму положил StringGrid и в ячейках вывожу числа. На фоне чисел в каждой ячейке хотел сделать круг

OnDrawCell делаю так:

Код:
with Calendar.Canvas do
 begin
       R:=Rect;
        R.Top:=R.Top+5;
        R.Left:=R.Left+5;
        R.Bottom:=r.Bottom-5;
        R.Right:=r.Right-5;
        Pen.Color:=clHotLight;
        Brush.Color:=clHotLight;
        Ellipse(R);
 
 
   
  end;

Все, в принципе получается, но корявенько как-то. Пробовал применить сглаживание как в этом примере , но тоже не фонтан, плюс очень медленно все отрисовывается...
Подскажите пожалуйста может есть какие-то другие способы нормально сгладить то что нарисовано на канве?

Для написания использую Delphi 7.
Ответить с цитированием
  #2  
Старый 22.10.2013, 16:17
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Самый наипростейший вариант - цифры картинками с уже заданным сглаживанием сделать, поместить в ImageList и выводить из него.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Dagmanor (22.10.2013)
  #3  
Старый 22.10.2013, 16:25
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
По умолчанию

Согласен, картинки в ImageList-е могут помочь, но все равно тема интересная. Хочется сделать именно сглаживанием.

Для наглядности покажу как получается


Последний раз редактировалось M.A.D.M.A.N., 22.10.2013 в 16:50.
Ответить с цитированием
  #4  
Старый 22.10.2013, 16:50
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Не открывается картинка, залей на fastpic.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #5  
Старый 22.10.2013, 16:57
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
По умолчанию

http://i60.fastpic.ru/big/2013/1022/...070a0bf70f.jpg

Ответить с цитированием
  #6  
Старый 22.10.2013, 17:00
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Посмотри здесь:
http://delphiworld.narod.ru/base/gau...ls_shadow.html
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Dagmanor (22.10.2013)
  #7  
Старый 22.10.2013, 17:31
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
По умолчанию

Спасибо за помощь. Буду наверное использовать Гауссовское размытие.
Ответить с цитированием
  #8  
Старый 22.10.2013, 17:56
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Вечером поищу более простой вариант размытия.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Dagmanor (25.10.2013)
  #9  
Старый 22.10.2013, 19:50
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Если устроит такое качество - выложу код. http://zalil.ru/34788775
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение:
Dagmanor (25.10.2013)
  #10  
Старый 22.10.2013, 22:23
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от dr. F.I.N.
Если устроит такое качество - выложу код. http://zalil.ru/34788775
Да, качество хорошее, буду благодарен за помощь.
Ответить с цитированием
  #11  
Старый 23.10.2013, 10:59
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

имхо, лучше чтобы еще края были полупрозрачными, чтобы на любом цвете фона было красиво.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 23.10.2013, 17:16
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Алгоритм простой:
1. Исходная картинка увеличивается в N раз (мне хватило 3, выше результат не сильно заметен).
2. На увеличенной картинке рисуем что надо с увеличением в N раз.
3. Уменьшаем полученную картинку в N раз, беря среднее значение цвета пикселей каждого квадрата NxN.
Код попозже вытяну из программы (много лишнего в процедуре). Но тут на DS есть исходник реализующий данный алгоритм.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение:
Dagmanor (25.10.2013)
  #13  
Старый 25.10.2013, 16:07
Dagmanor Dagmanor вне форума
Прохожий
 
Регистрация: 14.06.2012
Сообщения: 26
Версия Delphi: Delphi 2010 / 7
Репутация: 10
По умолчанию

Спасибо большое за ответы. Приятно когда людям не "в лом" помочь, но разобрался уже сам. Реализовал с помощью GDI+.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:30.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter