Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: C# работа с GDI+  (Прочитано 35229 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Tesey
Интересующийся

ua
Offline Offline

« : 16-07-2011 12:08 » 

Добрый день. Вот уже несколько лет пишу на С#. Частенько работала с GDI+. Но вот зашёл в тупик с решением на первый взгляд простой задачи.
Собственно задача: реализовать на С# c использование GDI+ выпуклый текст. Аналог эффекта bevel and emboss в фотошоп.
На изображении с лева то что у меня получилось на данный момент, а справа то, что нужно получить на самом деле.
Кто что знает? У кого какие идеи? Заранее большое спасибо.

* obrazec.png (18.46 Кб - загружено 3088 раз.)
« Последнее редактирование: 16-07-2011 13:05 от Finch » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-07-2011 16:28 » 

А GDI+ это умеет? Это ж не Photoshop...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 16-07-2011 17:12 » 

Скорее всего этого можно добиться наложением нескольких слоев.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Tesey
Интересующийся

ua
Offline Offline

« Ответ #3 : 16-07-2011 20:54 » 

А GDI+ это умеет? Это ж не Photoshop...
Стандартных функций конечно нет. Но с использованием имеющегося функционала это должно быть возможно. Может быть кто - то знает как это реализовать другими средствами(не GDI+) главное чтоб в код С# вернуть битмап с текстом или какой другой объект который потом можно отрисовать.

Добавлено через 8 минут и 56 секунд:
Скорее всего этого можно добиться наложением нескольких слоев.
я тоже так думаю, но вот как к этому подступиться? Даже примерно не пойму. Возможно тут нужно как-то реализовать алгоритм вычисления вершин  "внутренней буквы" указать эти вершины градиентной заливке. но вот какой принцип положить в основу алгоритма? По моему такой эффект можно реализовать с использованием WPF (но я с ним мало знаком) может кто знает как из приложения windowsForms с генерировать такой текст в wpf?
« Последнее редактирование: 16-07-2011 21:03 от Tesey » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 16-07-2011 21:15 » 

Tesey, Есть ли заливка градиентом цветов?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 17-07-2011 05:35 » 

Finch, в GDI+ где-то была, начиная с WinXP. Линейная, разумеется.

Может в битмапе нарисовать букву, а затем обработать этот растр алгоритмом - поиск границ, определение направления границ и подкраска соседних с границами пикселов?
« Последнее редактирование: 17-07-2011 05:37 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Tesey
Интересующийся

ua
Offline Offline

« Ответ #6 : 17-07-2011 06:10 » 

Tesey, Есть ли заливка градиентом цветов?
Заливка есть,  линейная, ей можно добавить неограниченное количество цветов и задать их координаты. так же есть некая заливка по контуру но к сожалению она вообще какая то загадочная  и годиться только для того чтобы заливать круги.(это у неё хорошо получаеться)

Finch, в GDI+ где-то была, начиная с WinXP. Линейная, разумеется.

Может в битмапе нарисовать букву, а затем обработать этот растр алгоритмом - поиск границ, определение направления границ и подкраска соседних с границами пикселов?
я начинал двигаться в этом направлении. Но пересчёт пикселей при отрисовке довольно тяжёлая задача для компа. и тем тяжелее чем больше буква по размеру и чем больше букв. таких осложнений я не наблюдал в фотошопе, поэтому отбросил этот вариант как несостоятельный.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 17-07-2011 13:30 » 

Tesey, а что, надо много таких букв с таким вычурным начертанием? Наверняка один лишь заголовок или слоган какой-нибудь.

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

Кэш можно формировать хоть заранее, хоть по мере потребности.

Если же выпуклость буквы аналогична выпуклости пирога в форме, то алгоритм и вовсе простой. От каждой точки буквы искать ближайшую (по радиус-вектору) точку фона: чем больше расстояние до края, тем "выше" данный пиксель над плоскостью. А потом эту 3D модель подкрасить в соответствии с освещённостью (т.е. углом между нормалью в каждой точке и направлением на источник света).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Tesey
Интересующийся

ua
Offline Offline

« Ответ #8 : 17-07-2011 14:00 » 

Это Будет программа по созданию открыток основная задача это текстовые эффекты. в процессе работы программы текст постоянно меняется он поворачивается в перспективу, выгибается дугой и тому подобное не говоря о банальной смене шрифта. то есть при каждом изменении параметров текста нужно переопределять кэш. например на моём компе (а о не самый слабый) перебор четырёх букв по 300Х300 пикселей каждая длиться секунды 2 - 3 несильно приятная процедура при банальной смене шрифта?

Добавлено через 3 минуты и 26 секунд:
но идея с пирогом мне понравилась. это уже что - то, большое спасибо. но не уверен что это будет работать достаточно быстро
« Последнее редактирование: 17-07-2011 14:03 от Tesey » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 17-07-2011 14:39 » 

Tesey, поищи в сети "уроки" работы с Photoshop или GIMP по созданию различных эффектов с печатными символами. Алгоритм преобразований там по шагам расписывается. Попробуй сделать аналогичное в своей программе.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 17-07-2011 15:01 » 

Почему тогда GDI+, а не WPF на базе DirectX? Там можно задавать 3D-модели букв, изгибать и раскрашивать, как душе угодно.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 17-07-2011 15:37 » 

Tesey, не практичнее ли будет взять готовую графическую программу, которая умеет делать такие трюки с текстом, и управлять ей через COM?

Чем построено желаемое изображение справа?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Tesey
Интересующийся

ua
Offline Offline

« Ответ #12 : 17-07-2011 15:58 » 

Tesey, поищи в сети "уроки" работы с Photoshop или GIMP по созданию различных эффектов с печатными символами. Алгоритм преобразований там по шагам расписывается. Попробуй сделать аналогичное в своей программе.
в фотошопе это делается установкой одной галочки. ни какой методы для этого нет
Чем построено желаемое изображение справа?
фотошопом
Tesey, не практичнее ли будет взять готовую графическую программу, которая умеет делать такие трюки с текстом, и управлять ей через COM?
не обижайтесь, но по моему это всё равно что чинить мотор через выхлопную.
Почему тогда GDI+, а не WPF на базе DirectX? Там можно задавать 3D-модели букв, изгибать и раскрашивать, как душе угодно.
Честно говоря потому что я с wpf и DirectX практически не знаком. Но думаю стоит посмотреть в эту сторону. можете подсказать какой-нибудь толковый хэлп по этой теме. заранее спасибо.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 17-07-2011 16:11 » 

не обижайтесь, но по моему это всё равно что чинить мотор через выхлопную.

Обосновать эту точку зрения не затруднит?

Я-то не обижаюсь, но вот идея реализовать заново готовые функции, которые у вас уже есть в наличии и судя по рисунку прекрасно работают, вместо того, чтобы написать несколько строчек для их вызова, мне кажется куда больше похожей на ремонт мотора через выхлопную. Хотя, если навалом свободного времени, почему бы и не изобрести очередной велосипед?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Tesey
Интересующийся

ua
Offline Offline

« Ответ #14 : 17-07-2011 17:30 » 

Обосновать эту точку зрения не затруднит?

Я-то не обижаюсь, но вот идея реализовать заново готовые функции, которые у вас уже есть в наличии и судя по рисунку прекрасно работают, вместо того, чтобы написать несколько строчек для их вызова, мне кажется куда больше похожей на ремонт мотора через выхлопную. Хотя, если навалом свободного времени, почему бы и не изобрести очередной велосипед?
Первое. Для того чтоб моя программа работала необходимо что б на мошине был установлен Фотошоп. а лицензия на него не так мало стоит.
Второе. Я вам буду просто безумно благодарен если вы мне напишите эти две строчки которые пробудят в фотошопе желание обработать моё изображение и вернуть мне результат. Готов за помощь в течении недели перечислить 500 wmr (по моему нормальная плата за 2 строчки?)
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 17-07-2011 17:58 » 

Первое. Для того чтоб моя программа работала необходимо что б на мошине был установлен Фотошоп. а лицензия на него не так мало стоит.

Судя по рисунку из первого поста, а также по чистосердечному признанию:

Чем построено желаемое изображение справа?
фотошопом

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

Второе. Я вам буду просто безумно благодарен если вы мне напишите эти две строчки которые пробудят в фотошопе желание обработать моё изображение и вернуть мне результат. Готов за помощь в течении недели перечислить 500 wmr (по моему нормальная плата за 2 строчки?)

Речь изначально шла о нескольких строчках:

вместо того, чтобы написать несколько строчек для их вызова

, где "несколько" не обязательно тождественно равно 2. Если предложение "500 wmr за 2 строчки" следует трактовать как "250 за каждую строку", то вполне сможем договориться. Разумеется, лишних строк там не будет, и пустые строки с комментариями не в счет, только значимые.
« Последнее редактирование: 17-07-2011 18:02 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 17-07-2011 18:40 » 

Tesey, поищи в сети "уроки" работы с Photoshop или GIMP по созданию различных эффектов с печатными символами. Алгоритм преобразований там по шагам расписывается. Попробуй сделать аналогичное в своей программе.
в фотошопе это делается установкой одной галочки. ни какой методы для этого нет

Значит совет мой пропущен мимо ушей. Ключевое слово - "поищи". В те времена, когда в программах не было кнопки "сделать все как я хочу", люди чуть-чуть напрягали мозги и даже выкладывали процесс в интернете. Лично видел и делал. Надо только немного потрудиться и поискать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #17 : 17-07-2011 18:42 » new

Dale, Скорее всего, что эта программа будет работать не только на этой машине. И 100 процентную гарантию никто не даст, что там также будет установлен фотошоп. Так что получается, чтоб работала эта программа на 1 мегабайт, нужно доустанавливать также 1 DVD (Или сколько он уже сейчас весит) фотошопа +  платить за лицензию около 1 килобакса.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 17-07-2011 19:25 » 

Основа многих преобразований с эффектами объема - свертка (convolution). Стоит поэкспериментировать с небольшими матрицами 3х3. Не знаю, как там в Фотошопе, а в GIMP такая возможность есть - вручную задать значения матрицы и посмотреть результат.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 17-07-2011 19:48 » 

Dale, Скорее всего, что эта программа будет работать не только на этой машине. И 100 процентную гарантию никто не даст, что там также будет установлен фотошоп. Так что получается, чтоб работала эта программа на 1 мегабайт, нужно доустанавливать также 1 DVD (Или сколько он уже сейчас весит) фотошопа +  платить за лицензию около 1 килобакса.

Верно, этой информацией мы сейчас не располагаем, - может, все делается на домашнем компе для баловства, а может, для работы или для передачи заказчику. Если уж это может делаться сейчас ручками в килобаксовом фотошопе, есть некоторая вероятность, что можно будет рулить тем же самым фотошопом как сервером OLE для выполнения этих же действий автоматом. Да и на фотошопе свет клином не сошелся, для этой задачи можно было бы что-то полегче из готового подобрать.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Tesey
Интересующийся

ua
Offline Offline

« Ответ #20 : 18-07-2011 08:46 » 

Эта программа на заказ. Передаётся заказчику. Использование сторонних программ не желательно.

А насчёт оплаты за помощь в управлении фотошопом, вы производите впечатление умного человека, а значит понимаете что указанное вознаграждение подразумевало не построчную оплату а оплату за весь кусок кода. (с 2 строчками ошибся, моя вина, приношу свои извинения) моё предложение остаётся в силе: первому, кто предоставит рабочий кусок кода на С# для приложения WinForms,  который может сделать такой эффект с любым текстом вознаграждение 500 wmr.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 18-07-2011 09:27 » 

вы производите впечатление умного человека, а значит понимаете что указанное вознаграждение подразумевало не построчную оплату а оплату за весь кусок кода.

За комплимент, конечно, спасибо, а вот насчет "заманчивой" суммы...

Как говорится, "не дай бог так оголодать".
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 18-07-2011 10:21 » 

Tesey, здесь Dale прав. Типичные расценки 30-85 евро за человеко-час работы (в зависимости от сложности задачи и квалификации исполнителя).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Tesey
Интересующийся

ua
Offline Offline

« Ответ #23 : 18-07-2011 10:38 » 

Tesey, здесь Dale прав. Типичные расценки 30-85 евро за человеко-час работы (в зависимости от сложности задачи и квалификации исполнителя).
Это ж где такие зарплаты? я тоже хочу там работать. у нас в городе час работы программиста 100 - 200 руб для человека знающего что и как делать это работы максимум на 3 часа. а если уже есть готовый пример то вообще достаточно копи паста.  исходя из этого и предлагаю такую сумму. 
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 18-07-2011 11:20 » 

Tesey, это не зарплаты. Это клиентам час работы программиста во столько обходится. А с них ещё платятся налоги, социальные и пр. страховки и тд.  Копи-паст это не есть работа, хотя конечно, я тоже хотел бы там работать где за копи-паст платят зарплату. Впрочем, думаю не я один.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 18-07-2011 12:30 » 

В общем, если речь о поиске работника, то прошу писать сюда: https://forum.shelek.ru/index.php/board,84.0.html
Тут придерживаемся темы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 18-07-2011 15:08 » 

Цитата: Джон
А с них ещё платятся налоги, социальные и пр. страховки и тд.
Амортизация техники, покупных лицензий, аренда офиса, административно-хозяйственные расходы и т.д.

А ещё надо работать так, чтобы было что отложить на отпуск, потратиться на образование и повышение квалификации.

Даже если это лишь фрилансер-одиночка.

В том и разница между "получкой" и "бизнесом".
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Tesey
Интересующийся

ua
Offline Offline

« Ответ #27 : 18-07-2011 16:11 » 

RXL, я не ищу работника. я ищу помощи, ценного совета который бы помог мне быстро решить данную задачу. Честно говоря я надеялся что знатоки обитающие на этом форуме уже не раз сталкивались с такими задачами и если и не предложат кусок кода, то хотя бы укажут на статью с адекватным материалом. Я остригался что моё предложение денег может нарушить какие либо правила вашего форума, однако всё таки решился, потому как не нашёл конкретного запрета, и уж больно велико моё желание найти решение этой задачи. Просто удивительно что никто ни когда с такими задачами не сталкивался. да и в сети я адекватного материала не нашёл, с начало подумал что это у меня мозги не туда заточены раз не могу поисковику объяснить что я от него хочу но выходит нет. Материала действительно в свободном доступе нет раз такие гиганты мысли не смогли тыкнуть в него носом.

PS это второй раз за 6 лет когда я обращаюсь за помощью на форум. если кого обидел или нарушил правила, прошу прощения. если смогу решить задачу обязательно выложу пример кода.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #28 : 18-07-2011 16:15 » 

Tesey, попробуй все таки свертку. Чай алгоритм весьма не сложен в реализации. Сложность только с подбором значений матрицы.
Я проделал пару экспериментов в GIMP 2.6 - там матрица 5х5. Маловата для больших букв. Лучше взять размер матрицы шириной где-то между половиной и полной шириной линий буквы.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #29 : 28-07-2011 13:05 » 

Tesey, если вызов другой программы все же рассматривается как вариант, то можно рассмотреть ImageMagick. Она, вроде бы, бесплатна и предоставляет довольно богатый функционал через API.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines