|
Вопрос # 1 913/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Прошу прощения, если тема старая. Я использую Delphi7+delphiX. Подключая графику, получаю вокруг картинок контур, так как по краю картинки не чистый tranparent color, а его градиент от цвета прозрачности к цвету картинки. Хотелось бы использовать маску, задающую отдельным пикселам прозрачность, только не 100% прозрачность, а, скажем, в зависимости от оттенка маски. Например, цвет маски серый-рисуем пиксел картинкуи полупрозрачным, цвет белый-полностью сохраняем гамму пиксела, цвет чёрный-пиксел прозрачен. Заранее спасибо
 |
Вопрос задал: 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 (статус: Посетитель), 18 сентября 2008, 21:29 [#2]:
2 Учёный. Идея хорошая, но не всегда графика имеет четкий контур, так например, нарисованное в шопе мягкой кистью и задумывалось как полупрозрачное по контуру, а обрезание-заливка как раз и оставляют градиент цвета, не обеспечивая прозрачность
|
|
Ученый (статус: 8-ой класс), 19 сентября 2008, 13:25 [#3]:
Посоветую вам посмотреть здесь:
<a href="https://www.delphi-int.ru/articles/106/">Обучающий курс. 6. Обзор свойств формы</a>
А вообше скажу что обрабатывайте картинку в графическом редакторе сразу как надо, так как там можно сделать как вы говорите пиксел и полупрозрачсным, и каким захотите, причем довольно легко и профессионально!!!
|
|
red_88 (статус: Посетитель), 22 сентября 2008, 12:09 [#4]:
мне не надо, чтобы вся картинка была полупрозрачной, просто по контуру цвет должен смешиваться с цветом фона,а т.к. картинка перемещается по фону, то нельзя статично задать цвет пикселов этого контура, а надо его просчитывать, тут то и нужна маска
|
|
Вадим К (статус: Академик), 22 сентября 2008, 12:24 [#5]:
Мне кажеться, что средствами обычного GDI это будет сделать накладно. Надо будет использовать GDI+ и alpha канал.
Хотя многие программы делают "обманки". Они при каждом перемещении просто пересчитывают картинку.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
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 (статус: Посетитель), 22 сентября 2008, 14:44 [#8]:
наверное, я плохо объясняю. движется не сама форма, а картинки по форме (рыбки плавают), соответственно они и должны перерисовываться. вопрос в том как осуществить перерисовку не попикселно, а, скажем, процедурой, наложив спрайт на область фона. есть ещё проблеа в том, что рыбки могут пересекаться, тогда проблема увеличивается. интересует, в первую очередь, вопрос о том, есть ли в delphiX наследник спрайта, работающий с маской примерно так: загрузил image, загрузил mask, и дальше только перемещаем спрайт, а прорисовка сама идёт, или же обязательно обрабатывать каждую картинку в отдельности?
|
|
Вадим К (статус: Академик), 22 сентября 2008, 14:50 [#9]:
Попиксельная процедура - это почти всегда плохо, потому что это медленно.
С делфиХ не работал, но думаю там должна быть функция, которая сможет рисовать либо исползуя маску, либо, что более вероятно - альфаканал.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
red_88 (статус: Посетитель), 22 сентября 2008, 14:55 [#10]:
попикселно не только плохо, но ещё и заморчно=лень 
по гуглу не нашёл такой процедуры, мб есть ссылки на ресурсы посвященные работе с delphiX?
delphiworld и drkb прошу не предлагать, уже облазил
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|