A
apache
Unregistered / Unconfirmed
GUEST, unregistred user!
新增加了
一个alpha16库的16位下 很炫的图片淡出特效(delphi)
具体请看http://www.dreamprogram.com/pages/msample_fedeout.htm
16位下 很炫的图片淡出特效(delphi)
-------------- 作者:apached 2002/8/22
这是使用alpha混合,让一些方块淡出慢慢覆盖原先的图的一种特效。其中使用了jedi-directx7 头文件和一个我从其它的类库中转过来的一个支持 jedi-directx 的alpha16库(汇编优化)。这个alpha库的提供了很多种的alpha混合模式( BM_SCREEN ,BM_ADD, BM_NORMAL , BM_MODULATE).这些库文件在我的网站上有下载www.dreamprogram.com.
下面我们来看看这个效果的具体实现
首先是创建一个窗口(我本来为了减小demo的编译后的大小,我没有使用vcl的窗口类,而是自己用api创建了窗口,可是我来发现jedi directx 使用了vcl,使我的程序不可避免的大了。反而变得麻烦了)
// 初始化窗口,注册窗口类。
function WinInit( h_Inst : THANDLE;
nCmdShow : Integer;
var phWnd : THandle;
var phAccel : HACCEL ) : HRESULT;
//然后是消息循环
//处理消息
function WindowProc( h_Wnd : THandle;
aMSG : Cardinal;
wParam : Cardinal;
lParam : Integer ) : Integer;
stdcall;
//窗口建立好了后初始化directdraw,
function InitDirectDraw( h_Wnd : HWND ) : HRESULT;
function CreateWindowedDisplay( h_Wnd : HWND;
dwWidth, dwHeight : LongWord ) : HRESULT;
在这我建立一个300*300的窗口
建立一个表面并且读入背景图
CreateSurfaceFromBitmap(t1Surface, PAnsiChar( '1.bmp' ) , 300, 300);
上面都是例行公事,下面就是重要的淡出算法了
fedeout
Tile : array[0..5,0..5] of Byte;//申明一个2维数组 准备用60*60的小方格逐渐覆盖背景图。
for iii := 0 to 5 do
//初始化数组
for jjj := 0 to 5 do
Tile[jjj,iii] := 0;
for iii := 0 to 24+16 do
begin
if (iii < 25)then
begin
xxx := random(5);
yyy := random(5);
while(tile[xxx,yyy] > 0)do begin
xxx := random(5);
yyy := random(5);
end;
tile[xxx,yyy] := 1;
end;
for jjj := 0 to 24 do
begin
xxx := jjj mod 5;
yyy := jjj div 5;
if ((tile[xxx,yyy] > 0)and(tile[xxx,yyy] < 16))then
begin
//循环产生25个方格,并且逐渐混合到表面
with rc do
begin
top:=yyy*60;
left:=xxx*60;
right:=xxx*60+60;
bottom:=yyy*60+60;
end;
tile[xxx,yyy] := tile[xxx,yyy] + 1;
t1surface.m_pdds.Lock(nil,t1surface.m_ddsd,0,0);//lock表面
al.DirectBlendRect(t1surface.m_ddsd,rc,$101010,0);//把当前的方格alpha 混合到表面上
t1surface.m_pdds.Unlock(nil);//解锁
g_pdisplay.Blt(0,0,t1surface,nil);//copy到离屏表面
g_pdisplay.Blt(0,0,t2surface,nil);
g_pdisplay.Flip;//翻转
end;
end;
end;
到此效果已经出来,如果大家有兴趣还可以在上面做出更多的效果。
源代码(45k) 执行文件(309k)以上例子需要directx 7 在delphi 5上编译通过。(已经自带了alpha16.pas,directdraw.pas)
以上出自www.dreamprogram.com 装载请注明出处
一个alpha16库的16位下 很炫的图片淡出特效(delphi)
具体请看http://www.dreamprogram.com/pages/msample_fedeout.htm
16位下 很炫的图片淡出特效(delphi)
-------------- 作者:apached 2002/8/22
这是使用alpha混合,让一些方块淡出慢慢覆盖原先的图的一种特效。其中使用了jedi-directx7 头文件和一个我从其它的类库中转过来的一个支持 jedi-directx 的alpha16库(汇编优化)。这个alpha库的提供了很多种的alpha混合模式( BM_SCREEN ,BM_ADD, BM_NORMAL , BM_MODULATE).这些库文件在我的网站上有下载www.dreamprogram.com.
下面我们来看看这个效果的具体实现
首先是创建一个窗口(我本来为了减小demo的编译后的大小,我没有使用vcl的窗口类,而是自己用api创建了窗口,可是我来发现jedi directx 使用了vcl,使我的程序不可避免的大了。反而变得麻烦了)
// 初始化窗口,注册窗口类。
function WinInit( h_Inst : THANDLE;
nCmdShow : Integer;
var phWnd : THandle;
var phAccel : HACCEL ) : HRESULT;
//然后是消息循环
//处理消息
function WindowProc( h_Wnd : THandle;
aMSG : Cardinal;
wParam : Cardinal;
lParam : Integer ) : Integer;
stdcall;
//窗口建立好了后初始化directdraw,
function InitDirectDraw( h_Wnd : HWND ) : HRESULT;
function CreateWindowedDisplay( h_Wnd : HWND;
dwWidth, dwHeight : LongWord ) : HRESULT;
在这我建立一个300*300的窗口
建立一个表面并且读入背景图
CreateSurfaceFromBitmap(t1Surface, PAnsiChar( '1.bmp' ) , 300, 300);
上面都是例行公事,下面就是重要的淡出算法了
fedeout
Tile : array[0..5,0..5] of Byte;//申明一个2维数组 准备用60*60的小方格逐渐覆盖背景图。
for iii := 0 to 5 do
//初始化数组
for jjj := 0 to 5 do
Tile[jjj,iii] := 0;
for iii := 0 to 24+16 do
begin
if (iii < 25)then
begin
xxx := random(5);
yyy := random(5);
while(tile[xxx,yyy] > 0)do begin
xxx := random(5);
yyy := random(5);
end;
tile[xxx,yyy] := 1;
end;
for jjj := 0 to 24 do
begin
xxx := jjj mod 5;
yyy := jjj div 5;
if ((tile[xxx,yyy] > 0)and(tile[xxx,yyy] < 16))then
begin
//循环产生25个方格,并且逐渐混合到表面
with rc do
begin
top:=yyy*60;
left:=xxx*60;
right:=xxx*60+60;
bottom:=yyy*60+60;
end;
tile[xxx,yyy] := tile[xxx,yyy] + 1;
t1surface.m_pdds.Lock(nil,t1surface.m_ddsd,0,0);//lock表面
al.DirectBlendRect(t1surface.m_ddsd,rc,$101010,0);//把当前的方格alpha 混合到表面上
t1surface.m_pdds.Unlock(nil);//解锁
g_pdisplay.Blt(0,0,t1surface,nil);//copy到离屏表面
g_pdisplay.Blt(0,0,t2surface,nil);
g_pdisplay.Flip;//翻转
end;
end;
end;
到此效果已经出来,如果大家有兴趣还可以在上面做出更多的效果。
源代码(45k) 执行文件(309k)以上例子需要directx 7 在delphi 5上编译通过。(已经自带了alpha16.pas,directdraw.pas)
以上出自www.dreamprogram.com 装载请注明出处