Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Эффект 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
3-1097763050
denis24
2004-10-14 18:10
2004.11.14
Добавление записи в table


1-1098960063
_Kirill_
2004-10-28 14:41
2004.11.14
Способы хранения на диске большого кол-ва переменных НЕ в БД


1-1098810059
aab
2004-10-26 21:00
2004.11.14
winapi owner, parent delphi-?


3-1097930940
TSL
2004-10-16 16:49
2004.11.14
Проблема с полем Image в mssql2000


14-1098522570
Agent13
2004-10-23 13:09
2004.11.14
Intel processor numbers