Вверх ↑
Этот топик читают: Гость
Ответов: 1749
Рейтинг: 604
#1: 2018-11-15 23:02:56 ЛС | профиль | цитата
nesco, хотел сделать тень у текста, получил бонусом тень краев. Вот тестовая схема:

Add(MainForm,2953706,406,133)
{
Width=373
Height=296
Position=1
link(onCreate,5430549:doCreate,[])
}
Add(Img_Text,7264361,455,203)
{
X=2
Y=2
Font=[Verdana,36,1,0,204]
Text="T"
link(onDraw,13014802:doShadow,[])
link(Bitmap,13846490:Var2,[])
}
Add(PaintBox,13234352,553,133)
{
Left=10
Top=5
Width=345
Height=260
Color=16777215
}
Add(Bitmap,5430549,455,133)
{
HWidth=100
HHeight=100
FillColor=16711935
Point(onCreate)
Point(doCreate)
link(onCreate,7264361:doDraw,[(499,139)(499,112)(391,112)(391,209)])
}
Add(Img_AlphaBmp,1001163,553,203)
{
X=100
Y=50
AlphaBlendValue=125
link(Bitmap,13234352:Bitmap,[])
}
Add(AlphaShadow,13014802,504,203)
{
ShiftX=12
ShiftY=12
TransparentColor=16711935
link(onShadow,1001163:doDraw,[])
link(Bitmap,13846490:Var3,[(510,187)])
}
Add(GetDataEx,13846490,455,182)
{
link(Data,5430549:Bitmap,[])
}
Вот что получается:
Почему делается тень верхнего левого угла картинки?
карма: 7

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 25426
Рейтинг: 2070
#2: 2018-11-15 23:57:20 ЛС | профиль | цитата
sla8a писал(а):
Почему делается тень верхнего левого угла картинки?

Потому, что рисунок в обычном bmp -- 24bpp, и у него нет маски. Более корректно все это безобразие будет работать только с цветом фона -- clNone
Схема


Add(MainForm,13448457,196,238)
{
Width=373
Height=310
Position=1
link(onCreate,5430549:doCreate,[])
}
Add(Img_Text,7264361,245,308)
{
X=2
Y=2
Font=[Verdana,36,1,65793,204]
Text="T"
link(onDraw,13014802:doShadow,[])
link(Bitmap,13846490:Var2,[])
}
Add(PaintBox,13234352,357,238)
{
Left=10
Top=5
Width=345
Height=260
Color=16777215
}
Add(Bitmap,5430549,245,238)
{
HWidth=100
HHeight=100
FillColor=536870911
Point(onCreate)
Point(doCreate)
link(onCreate,7264361:doDraw,[(289,244)(289,217)(181,217)(181,314)])
}
Add(Img_AlphaBmp,1001163,357,308)
{
X=100
Y=50
AlphaBlendValue=125
link(Bitmap,13234352:Bitmap,[])
}
Add(AlphaShadow,13014802,308,308)
{
ShiftX=12
ShiftY=12
TransparentColor=536870911
link(onShadow,1001163:doDraw,[])
link(Bitmap,13846490:Var3,[(314,292)])
}
Add(GetDataEx,13846490,245,287)
{
link(Data,5430549:Bitmap,[])
}

карма: 19

0
Ответов: 1749
Рейтинг: 604
#3: 2018-11-16 09:59:39 ЛС | профиль | цитата
Получается это не ошибка. Хм... А что если сделать проверку получаемого изображение на 32bpp и при необходимости заменить цвет выставленный в TransparentColor на clNone?
К примеру после:
fmask := NewBitmap(0, 0);
Проверить:
if (Bmp.PixelFormat <> pf32bit) and (fTransparent <> clNone) then
И если истина, то залить fmask цветом clNone и нарисовать на нем Bmp с прозрачным цветом fTransparent.
И Bmp.Assign(fmask);
В противном случае:
fmask.Assign(Bmp);

Редактировалось 2 раз(а), последний 2018-11-16 10:10:57
карма: 7

0
Разработчик
Ответов: 25426
Рейтинг: 2070
#4: 2018-11-16 10:25:55 ЛС | профиль | цитата
sla8a писал(а):
К примеру

Попробуй, расскажешь
карма: 19

0
4
Сообщение
...
Прикрепленные файлы
(файлы не залиты)