Форум: "Потрепаться";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизЭффект Bevel (как в Photoshope) Найти похожие ветки
← →
Alein © (2004-10-27 23:03) [0]Хочу сделать фишку одну: Bitmap"у придать эффект выпуклости, ну тапа кнопки. Делал тень и отблеск, всё енто добро сглаживал, а потом накладывал из на Bitmap через AlphaBlending. Но получается КАКА. Некрасиво. Помогите!!!! Может у кого такая замутка уже была, мне бы алгоритм.
← →
Rouse_ © (2004-10-27 23:17) [1]Делай маску выпуклости и по маске изменяй пиксели...
Что-то наподобие BumpMapping...
ИМХО самое оптимальное...
← →
Alein © (2004-10-27 23:26) [2]Спасибо, что ответили,но можно поподробнее про маску...Please. Я её не разу не использовал.
← →
Rouse_ © (2004-10-27 23:30) [3]Поищи по слову BumpMapping
← →
Rouse_ © (2004-10-27 23:31) [4]http://delphigfx.mastak.ru/samples2.htm
http://delphigfx.mastak.ru/samples/samp22.rar
← →
VID © (2004-10-27 23:33) [5]Мы пойдём другим путём :)
Если ты юзаешь TImage или что то подобное то прость поставь ПОД НЕГО TBevel (лежит на странице Aditional) и в свойстве Style этого компонента установи bsRised.
Если же ты вырисовываешь битмам на какой-нить канве, то будь добр после этого (или до этого) динамически создавать тот же TBevel (либо юзать однажды созданный), и его Left, Top, Width, Heigh подстраивать под размеры битмапа на канве.
← →
Alein © (2004-10-27 23:33) [6]О"кей, просто мы с корешем пытаемся компонент написать, эдакий ImageButton. Спасибо за совет, я пойду спать, а то уже пол четвёртого утра. Пока.
← →
Alein © (2004-10-27 23:37) [7]Чё-то спать перехотелось. А насчёт TBevel- никак нельзя установить высоту, ширину, сглаженность, направление света, а это ограмный минус. Есть компонент itButton, но он зарегиться просит и к тому же OCX, с собой тоскать надо.
← →
Alein © (2004-10-30 01:31) [8]Хочу критики и предложений о том, как сделать лучше:
type TState=(Normal, Over, Press);
Procedure DrawButton(Source:HDC;Border:Integer; x,y,Width,Height:Integer; State:TState);
var BitMap:TBitMap; i, n:Integer; Blend:BlendFunction; MyDib:TFastDIB;
begin
n:=Border;
if state=over then n:=n+1;
blend.BlendOp:=AC_SRC_OVER;
blend.BlendFlags:=0;
blend.SourceConstantAlpha:=150;
blend.AlphaFormat:=0;
MYDib:=TFastDIB.Create;
MyDib.Width:=Width;
MyDib.Height:=Height;
BitMap:=TBitmap.Create;
Bitmap.Width:=Width;
Bitmap.Height:=Height;
BitBlt(bitmap.Canvas.Handle,0,0,width,height,Source,x,y,srccopy);
if state<>press then BitMAp.Canvas.Pen.Color:=clWhite else BitMAp.Canvas.Pen.Color:=clBlack;
BitMAp.Canvas.Brush.Style:=bsClear;
for i:=0 to n do begin
BitMap.Canvas.MoveTo(i,i);
BitMap.Canvas.LineTo(i,bitmap.Height-i);
BitMap.Canvas.MoveTo(i,i);
BitMap.Canvas.LineTo(Bitmap.Width-i,i);
end;
if state<>press then BitMAp.Canvas.Pen.Color:=clBlack else BitMAp.Canvas.Pen.Color:=clWhite;
for i:=0 to n do begin
BitMap.Canvas.MoveTo(Bitmap.Width-i,bitmap.Height-i);
BitMap.Canvas.LineTo(Bitmap.Width-i,i);
BitMap.Canvas.MoveTo(Bitmap.Width-i,bitmap.Height-i);
BitMap.Canvas.LineTo(i,bitmap.Height-i);
end;
MyDib.LoadFromHandle(Bitmap.Handle);
FastFX.SplitBlur(MyDib,round(n/(n+1)));
MyDib.Draw(bitmap.Canvas.Handle,0,0);
blend.SourceConstantAlpha:=252;
BitBlt(Bitmap.Canvas.Handle,n+1,n+1,bitmap.Width-(n+1)*2,bitmap.Height-(n+1)*2,Source,x+n+1,y+n+1,srccopy);
windows.AlphaBlend(Source,x,y,Width,Height,bitmap.Canvas.Handle,0,0,Width,Height, Blend);
MyDib.Free;
BitMap.Free;
end;
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.031 c