matlab 用alpha混合,透明图象及Alpha混合的简单实现。

在应用程序中引入图片淡入及淡出,可以让用户界面更加美观。 以前报刊杂志中介绍的常用方法有两种:一是自己写程序,逐个象素进行混合渐变;二是使用DirectX,建立一个带Alpha通道的Surface。

第一种,效果可以自己控制,但比较麻烦,而且一般不容易生成硬件优化的代码;

第二种速度很快,却需要使用DirectX库。其实在Windows的GDI中已经提供了一个很好的API――AlphaBlend,既保证速度又很简单。

function AlphaBlendA(DestDC: HDC; TopDest, LeftDest, WidthDest, HeightDest: Integer; SrcDC: HDC; TopSrc, LeftSrc, WidthSrc, HeightSrc: Integer; BlendFunction: TBlendFunction): BOOL; stdcall; // API函数声明

其中DestDC参数是生成画面的Handle,TopDest, LeftDest, WidthDest, HeightDest是生成画面的右上角坐标和长宽值;SrcDC, TopSrc, LeftSrc, WidthSrc, HeightSrc表示原图的相关参数,因为AlphaBlend会自动处理缩放,所以WidthDest, Height, LeftSrc, WidthSrc可以为不同值;DestBlendFunction是控制 Alpha 混合的结构。

DestBlendFunction这个结构,是AlphaBlend的使用中最重要的参数,它的定义如下:

typedef struct _BLENDFUNCTION

{

BYTE BlendOp;

BYTE BlendFlags;

BYTE SourceConstantAlpha;

BYTE AlphaFormat;

}BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;

BlendOP是混合方式,当前只有AC_SRC_OVER一种,即将SrcDC放置于DstDC之上,进行混合;

BlendFlags必须为零,为什么呢?M$没有告诉我们。

SourceConstantAlpha控制SrcDC画面的透明度,为0时,完全透明;为255时,完全不透明,其间逐渐变化。

AlphaFormat表示SrcDC和DstDC的格式,缺省为零,一般不用指定。

利用AlphaBlend还可以产生其它图象效果,比如将SourceConstantAlpha适当居中,能象PhotoShop一样出现“浮雕”的效果等。

在msimg32.dll中,除了AlphaBlend,还有TransparentBlt和GradientFill等很有用的API:TransparentBlt可以快速处理16色和256色的透明贴图(AlphaBlend可以处理32位色),以前有些文章建议不要在WIN98下使用,说会引起“资源泄露”,我想可能是因为它不支持32位色的缘故;GradientFill则能够借助硬件加速,产生颜色渐变的三角形或矩形,利用上它们,将会让你编写的程序更加吸引人。

msimg32.dll中应该还有其他很有用的函数,但M$既然保密,我们也无从可知,要是有哪位大侠知道,欢迎一起贴出来分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值