Главная страница
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.029 c
1-1098960063
_Kirill_
2004-10-28 14:41
2004.11.14
Способы хранения на диске большого кол-ва переменных НЕ в БД


1-1099403247
TSa
2004-11-02 16:47
2004.11.14
Заставка


3-1097618520
saNat
2004-10-13 02:02
2004.11.14
ADO и MS Access


14-1098629189
ОлегЪ
2004-10-24 18:46
2004.11.14
Нужно ли?


9-1089738902
JUS
2004-07-13 21:15
2004.11.14
Я пишу игру, типа мортала комбата.При управлении скажем китайца в