![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
алгорим подложки текстуры под битмап?
AlexT1000 © (2003-06-18 15:06:00)
кто-нибудь знает алгоритм подложки текстуры под битмап ( см фотошоп эффекты слоя текстура)?
Fenik (2003-06-24 19:28:00) [1]
> AlexT1000 © (23.06.03 14:19)
Спасибо. Попробую понять..
AlexT1000 (2003-06-23 14:19:00) [2]ну это такой режим смешивания битмапов . см фотошоп . ты кста можешь скачать этот и несколько других режимов с сайта G32. там в выкладках пользователей
для остальных просто привожу код
procedure Underlay(B1,B2 :TBitmap32);
Var i , j ,ii,jj,xx,yy,h : integer ;
C : TColor32;
P1 ,P2 , P3 : PColor32Array;
begin
P1 := B1.Bits;
P2 := B2.Bits;
C := Color32(255,255,255,255);
h := B2.Height;
for i:=0 to B1.Height-1 do
for j:=0 to B1.Width-1 do begin
ii := i * B1.Width + j;
yy := i mod h ;
xx := j mod B2.Width ;
jj := yy * h + xx;
Overlay(P2[jj],P1[ii],C);
end;
end;
procedure Overlay(F: TColor32; var B: TColor32; M: TColor32);
var fR,fG,fB, bR,bG,bB, aM: cardinal;
begin
{Foreground Alpha and Master Alpha combined}
aM := M and $FF;
aM := F shr 24 * aM;
aM := aM shr 8;
if aM = 0 then exit; //exit if nothing changes ...
{Channel separation}
fR := F shr 16 and $FF;
fG := F shr 8 and $FF;
fB := F and $FF;
bR := B shr 16 and $FF;
bG := B shr 8 and $FF;
bB := B and $FF;
{Combine}
if bR < 128 then fR := bR * fR shr 7 else
begin
fR := 255 - fR;
bR := 255 - bR;
fR := bR * fR shr 7;
fR := 255 - fR;
bR := 255 - bR;
end;
if bG < 128 then fG := bG * fG shr 7 else
begin
fG := 255 - fG;
bG := 255 - bG;
fG := bG * fG shr 7;
fG := 255 - fG;
bG := 255 - bG;
end;
if bB < 128 then fB := bB * fB shr 7 else
begin
fB := 255 - fB;
bB := 255 - bB;
fB := bB * fB shr 7;
fB := 255 - fB;
( fR-bR)ну это такой режим смешивания битмапов . см фотошоп . ты кста можешь скачать этот и несколько других режимов с сайта G32. там в выкладках пользователей
для остальных просто привожу код
procedure Underlay(B1,B2 :TBitmap32);
Var i , j ,ii,jj,xx,yy,h : integer ;
C : TColor32;
P1 ,P2 , P3 : PColor32Array;
begin
P1 := B1.Bits;
P2 := B2.Bits;
C := Color32(255,255,255,255);
h := B2.Height;
for i:=0 to B1.Height-1 do
for j:=0 to B1.Width-1 do begin
ii := i * B1.Width + j;
yy := i mod h ;
xx := j mod B2.Width ;
jj := yy * h + xx;
Overlay(P2[jj],P1[ii],C);
end;
end;
procedure Overlay(F: TColor32; var B: TColor32; M: TColor32);
var fR,fG,fB, bR,bG,bB, aM: cardinal;
begin
{Foreground Alpha and Master Alpha combined}
aM := M and $FF;
aM := F shr 24 * aM;
aM := aM shr 8;
if aM = 0 then exit; //exit if nothing changes ...
{Channel separation}
fR := F shr 16 and $FF;
fG := F shr 8 and $FF;
fB := F and $FF;
bR := B shr 16 and $FF;
bG := B shr 8 and $FF;
bB := B and $FF;
{Combine}
if bR < 128 then fR := bR * fR shr 7 else
begin
fR := 255 - fR;
bR := 255 - bR;
fR := bR * fR shr 7;
fR := 255 - fR;
bR := 255 - bR;
end;
if bG < 128 then fG := bG * fG shr 7 else
begin
fG := 255 - fG;
bG := 255 - bG;
fG := bG * fG shr 7;
fG := 255 - fG;
bG := 255 - bG;
end;
if bB < 128 then fB := bB * fB shr 7 else
begin
fB := 255 - fB;
bB := 255 - bB;
fB := bB * fB shr 7;
fB := 255 - fB;
bB := 255 - bB;
end;
{Blend}
bR := bR + (fR-bR)*aM shr 8;// bR := ( fR*aM + bR*(255-aM) )shr 8
bG := bG + (fG-bG)*aM shr 8;
bB := bB + (fB-bB)*aM shr 8;
{Reset - keeping B alpha}
B := B and $FF000000 or bR shl 16 or bG shl 8 or bB;
end;
Fenik (2003-06-22 02:00:00) [3]
> блендингмоде Overlay
Объясни, плз.
AlexT1000 (2003-06-20 14:57:00) [4]
я нашел как это делается. это делается через блендингмоде Overlay!
AlexT1000 (2003-06-20 12:03:00) [5]
это когда текстура как бы проступает т.е передает свой рельеф тому битмапу, под который она подкладывается .
это не прозрачность!
пока сам не увидишь не поймешь. типа bump-mapping вроде того
Stexen (2003-06-19 23:25:00) [6]
что именно нужно не очень понял фотошопом не пользуюсь? я понял как какую то полупрозрачность может и нет ну напиши по подробнее