Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 913

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Прошу прощения, если тема старая. Я использую Delphi7+delphiX. Подключая графику, получаю вокруг картинок контур, так как по краю картинки не чистый tranparent color, а его градиент от цвета прозрачности к цвету картинки. Хотелось бы использовать маску, задающую отдельным пикселам прозрачность, только не 100% прозрачность, а, скажем, в зависимости от оттенка маски. Например, цвет маски серый-рисуем пиксел картинкуи полупрозрачным, цвет белый-полностью сохраняем гамму пиксела, цвет чёрный-пиксел прозрачен. Заранее спасибо

red_88 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: red_88 (статус: Посетитель)
Вопрос отправлен: 18 сентября 2008, 14:52
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, red_88! А не проще просто обрезать картинку, ну скажем там в ACDSee или вкакойнибудь другой программе! Или поместить на не прозрачный фон, нужного цвета!

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 18 сентября 2008, 18:45


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 22 сентября 2008, 14:55; участников в обсуждении: 3.
Ученый

Ученый (статус: 8-ой класс), 18 сентября 2008, 18:34 [#1]:

А не проще просто обрезать картинку, ну скажем там в ACDSee или вкакойнибудь другой программе!
red_88

red_88 (статус: Посетитель), 18 сентября 2008, 21:29 [#2]:

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

Ученый (статус: 8-ой класс), 19 сентября 2008, 13:25 [#3]:

Посоветую вам посмотреть здесь:
<a href="http://www.delphi.int.ru/articles/106/">Обучающий курс. 6. Обзор свойств формы</a>
А вообше скажу что обрабатывайте картинку в графическом редакторе сразу как надо, так как там можно сделать как вы говорите пиксел и полупрозрачсным, и каким захотите, причем довольно легко и профессионально!!!
red_88

red_88 (статус: Посетитель), 22 сентября 2008, 12:09 [#4]:

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

Вадим К (статус: Академик), 22 сентября 2008, 12:24 [#5]:

Мне кажеться, что средствами обычного GDI это будет сделать накладно. Надо будет использовать GDI+ и alpha канал.
Хотя многие программы делают "обманки". Они при каждом перемещении просто пересчитывают картинку.
Галочка "подтверждения прочтения" - вселенское зло.
red_88

red_88 (статус: Посетитель), 22 сентября 2008, 13:33 [#6]:

2 ВадимК
я не против пересчитать картинку, еслибы только знать как это делается. разницы между GDI И GDI+ не вижу, потому как не знаю даже с какой стороны смотреть.
Мне надо картинки выводить из под DelphiX, разьве в нём чегонибудь похожего нет? или мб ктото знает как работать с alpha-каналлами "для чайников"?
Вадим К

Вадим К (статус: Академик), 22 сентября 2008, 13:40 [#7]:

отловить перемещение формы можно по WM_MOVE. При каждом перемещении оно будет вызываться.
А разница между GDI и GDI+ большая. Второе поддерживает полноценно прозрачность и альфа канал.
А вот с DelphiX (Ну на самом деле это обёртка вокруг DirectX) даже не знаю. Альфаканал точно должно поддерживать. Надо пробовать.
Алгоритм приблизительно такой. Надо взять картинку декстопа и текущую картинку фона приложения и смешать. А вот как будем смешивать - встроенными средствами или вручную - отдельная тема.
Хотя уже предчувствую, что под вистой прийдётся долго помучиться, что бы не было черной каймы вокруг приложения.
Галочка "подтверждения прочтения" - вселенское зло.
red_88

red_88 (статус: Посетитель), 22 сентября 2008, 14:44 [#8]:

наверное, я плохо объясняю. движется не сама форма, а картинки по форме (рыбки плавают), соответственно они и должны перерисовываться. вопрос в том как осуществить перерисовку не попикселно, а, скажем, процедурой, наложив спрайт на область фона. есть ещё проблеа в том, что рыбки могут пересекаться, тогда проблема увеличивается. интересует, в первую очередь, вопрос о том, есть ли в delphiX наследник спрайта, работающий с маской примерно так: загрузил image, загрузил mask, и дальше только перемещаем спрайт, а прорисовка сама идёт, или же обязательно обрабатывать каждую картинку в отдельности?
Вадим К

Вадим К (статус: Академик), 22 сентября 2008, 14:50 [#9]:

Попиксельная процедура - это почти всегда плохо, потому что это медленно.
С делфиХ не работал, но думаю там должна быть функция, которая сможет рисовать либо исползуя маску, либо, что более вероятно - альфаканал.
Галочка "подтверждения прочтения" - вселенское зло.
red_88

red_88 (статус: Посетитель), 22 сентября 2008, 14:55 [#10]:

попикселно не только плохо, но ещё и заморчно=лень :)
по гуглу не нашёл такой процедуры, мб есть ссылки на ресурсы посвященные работе с delphiX?
delphiworld и drkb прошу не предлагать, уже облазил

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 13 декабря 2017, 21:47
Выполнено за 0.03 сек.
Рейтинг@Mail.ru