Форум: "Media";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизСоздание кнопки с эффектом стекла... Найти похожие ветки
← →
Crazzy Jazzy (2005-04-12 15:23) [0]Здраствуйте!
Ну наподобии как у кнопок или элементов меню в MacOS...
Спасибо!
← →
XProger © (2005-04-13 14:10) [1]Image1.LoadFromFile("...");
← →
clampo © (2005-04-13 22:24) [2]Photoshop 8.0 - решит тови проблемы
← →
thaddy (2005-04-14 00:38) [3]Alpha blending with the alpha value put through an algorithm similar (equal) to gradient
← →
programania © (2005-04-14 21:21) [4]PhotoShopом пусть рисуют кто не может программы писать
А программой рисовать лучше,
потому что код меньше места занимает чем картинка,
код один для разных размеров, формы, цветов,
можно сделать полупрозрачность и антиалиазинг с разным фоном,
можно получить бесконечно много вариантов меняя
случайно несколько параметров, можно это делать в timer
чтоб все сверкало и переливалось.
Для примера кнопка типа стекла или воды
А кто сможет красивее?
пример: knopka(image1,$FF9080);
PROCEDURE knopka(i:tImage;cw:integer);
type
tm=array[0..40{макс.высота},0..120{ширина},1..3] of byte;
var
z:array[1..3] of integer;
cr,r,v,q,xx,yy,j,h4,h6,h8,x,y,h,w:integer;
yk: boolean;
m,f :^tm;
begin
w:=i.width; if w>120 then w:=120;
h:=i.height; if h>40 then h:=40;
getMem(m,sizeOf(tm));getMem(f,sizeOf(tm));
with i.canvas do begin
i.transparent:=true;
i.picture.bitmap.pixelformat:=pf24bit;
//сохранение фона
for y:=0 to h-1 do move(i.picture.bitmap.ScanLine[y]^,f^[y,0,1],w*3);
//цвет рамки потемнее
cr:=RGB(getRvalue(cw) div 16,getGvalue(cw) div 16,getBvalue(cw) div 16);
pen.color:=cr;
brush.color:=pen.color;
fillRect(rect(0,0,w,h));
brush.color:=cw;
pen.width:=3;
roundRect(1,1,w-1,h-1,16,16);
for y:=0 to h-1 do move(i.picture.bitmap.ScanLine[y]^,m^[y,0,1],w*3);
//блик
h6:=h div 6; h4:=h div 4; h8:=h div 8;
for x:=h4+2 to w-h4-2 do
for j:=1 to 3 do begin
for v:=0 to 3 do begin
//сверху
r:=m^[h6+v+1,x,j]+(4-v)*44; if r>=$FF then r:=$FE;
m^[h6+v+1,x,j]:=r;
//снизу
if v>2 then m^[h-h6-v+1,x,j]:=$FE;
end;
end;
//размытие
for y:=0 to h-1 do begin
for x:=0 to w-1 do
if ((y<>h6+1)and(y<>h6+2))or(x<=h4+5)or(x>=w-h4-5) then
if rgb(m^[y,x,3],m^[y,x,2],m^[y,x,1])=cr then
for j:=1 to 3 do m^[y,x,j]:=f^[y,x,j]
else begin
q:=0; z[1]:=0; z[2]:=0; z[3]:=0;
for yy:=y-2 to y+2 do
for xx:=x-2 to x+2 do
if (yy>=0)and(yy<h) and (xx>=0)and(xx<w) then begin
for j:=1 to 3 do inc(z[j],m^[yy,xx,j]);
inc(q);
end;
for j:=1 to 3 do m^[y,x,j]:=z[j] div q;
end;
move(m^[y,0,1],i.picture.bitmap.ScanLine[y]^,w*3);
end;
freeMem(m);freeMem(f);
end;
end;
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.033 c