16位下 很炫的图片淡出特效(delphi版)

liseal 2002-08-29 11:56:26
具体请看http://www.dreamprogram.com/pages/msample_fedeout.htm


<img src="../images/snap.jpg" width="308" height="346">

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 装载请注明出处
...全文
122 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
IO_X 2002-08-29
  • 打赏
  • 举报
回复
似乎不怎么样
算法也简单
内容概要:本文提出了一种基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法,并提供了完整的Python代码实现。该方法针对高海拔地区风能、光伏等新能源出力波动剧烈、不确定性高的特点,通过优化扩散模型的结构与训练策略,有效捕捉历史数据的概率分布特征与时序相关性,从而生成高质量、多样化的出力场景。文中详细阐述了模型的数学推导、网络架构设计、损失函数优化及采样算法改进,并通过实验证明其在拟合精度、场景多样性与稳定性方面优于传统生成模型,为电力系统在高比例新能源接入下的规划、调度与风险评估提供了可靠的场景输入支持。; 适合人群:具备一定Python编程能力和机器学习基础,从事新能源发电预测、电力系统分析、智能优化、场景生成等方向研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①用于高海拔地区风电、光伏出力的不确定性建模与多场景生成;②支撑含高渗透率新能源的电力系统随机优化调度、鲁棒决策与风险评估;③为相关学术研究、论文复现与算法改进提供可运行的技术方案与代码基础; 阅读建议:建议读者结合所提供的完整资源(代码、数据集、说明文档)进行实践操作,重点关注扩散模型的前向加噪与反向去噪过程的设计细节,以及如何将其适配于新能源时序数据的生成任务,通过参数调优与对比实验深入理解模型的生成机制与性能边界。
内容概要:本文围绕基于静态约束法的配电网电动汽车接入容量评估展开研究,提出了一种在新型电力系统背景下评估主动配电网对电动汽车承载能力的方法。研究通过构建数学模型,结合潮流计算与关键约束条件(如电压越限、线路过载等),量化分析配电网可承受的最大电动汽车充电负荷容量,旨在识别规模化电动汽车接入带来的潜在运行风险,并为电网规划与运行提供科学依据。文中配套提供了完整的Matlab代码实现,便于仿真验证与结果复现。此外,该研究与分布式光伏承载力评估、电动汽车可调能力分析等方向形成技术联动,展现了多主题协同的研究体系。; 适合人群:具备电力系统分析基础理论知识及Matlab编程能力的高校研究生、科研机构研究人员,以及从事新能源并网、智能配电网规划与运行等相关领域的工程技术人员。; 使用场景及目标:①用于学术研究中的模型复现与论文撰写支撑;②评估实际配电网中电动汽车大规模接入的可行性与安全边界,指导充电基础设施布局;③作为高校教学案例,帮助学生深入理解电网承载力评估的核心原理、建模方法与仿真技术; 阅读建议:建议结合文中提及的相关研究方向(如二阶锥规划、多面体聚合方法等)进行对比学习,充分利用所提供的Matlab代码与网盘资料开展仿真实验,重点关注约束条件的设定逻辑与潮流计算模块的实现细节,以深化对评估模型机理与工程应用价值的理解。

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧