AlphaBlend问题求教

chinahuman 2005-03-26 01:18:50
我有两个bitmap想实现按一定透明度来融合,使用以下代码
nToX := Min(X + Src.Width, Dest.Width);
nToY := Min(Y + Src.Height, Dest.Height);
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.SourceConstantAlpha := Alpha mod 255;
bf.AlphaFormat := 0 ;


AlphaBlend(Dest.Handle, X, Y, nToX, nToY, Src.Handle, 1, 1, nToX - X, nToY - Y, bf);
其中X, Y就是Src要在Dest上画的起始点坐标,nToX, nToY这个是右下解的坐标.可是为什么我执行都不成功呢?
我的系统是windows2003这个API应该是支持的呀.
不知道大家能不能给我指出一下问题所在?
...全文
259 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ehom 2005-03-30
  • 打赏
  • 举报
回复
这问题怎么回答?Src和Dest是什么?

TBitmap?

那很简单

Dest.Handle
Src.Handle
=>
Dest.Canvas.Handle
Src.Canvas.Handle

参数类型是什么?HDC,而不是HBITMAP。这种东西查查MSDN,很简单。

还有种可能,你根本就没调到GDI
AlphaBlend
=>
Windows.AlphaBlend

为什么一定要用GDI/GDI+?又没效率,又不够灵活。
chinahuman 2005-03-29
  • 打赏
  • 举报
回复
:(希望有用过的兄弟们帮个忙呀!
chijingde 2005-03-28
  • 打赏
  • 举报
回复
AlphaBlend我还真没用过……

chinahuman 2005-03-28
  • 打赏
  • 举报
回复
这个API应该很多人用过的吧?
为什么大家都不看我的问题,就在乱回答呢?
chinahuman 2005-03-27
  • 打赏
  • 举报
回复
这些我知道呀
我想问的是我那样调用为什么是不成功的?
S.F. 2005-03-27
  • 打赏
  • 举报
回复
alpha混合的基本公式:

result = ALPHA * srcPixel + ( 1 - ALPHA ) * destPixel
caiso 2005-03-27
  • 打赏
  • 举报
回复
帮顶一下
chinahuman 2005-03-27
  • 打赏
  • 举报
回复
chijingde(AD):你用的方法我现在就在用,但是感觉不好,想用这个API使用GDI+来实现,我查了很多资料,他们都是这么调用的,可是为什么我调用不成功?
chijingde 2005-03-27
  • 打赏
  • 举报
回复
前几天刚在群里跟他们讨论过这个玩意

具体咋实现,问CoolSlob和饭桶,他们都有现成的代码

说说原理



简易Alpha混合算法



首先,要能取得上层与下层颜色的 RGB三基色,然后用

r,g,b 为最后取得的颜色值;r1,g1,b1是上层的颜色值;r2,g2,b2是下层颜色值

r = r1/2 + r2/2;

g = g1/2 + g2/2;

b = b1/2 + b2/2;

以上为50%透明。若要使用不同的透明度用以下算法(ALPHA=透明度):

(50%以下)

r = r1 - r1/ALPHA + r2/ALPHA;

g = g1 - g1/ALPHA + g2/ALPHA;

b = b1 - b1/ALPHA + b2/ALPHA;

(50%以上)

r = r1/ALPHA + r2 - r2/ALPHA;

g = g1/ALPHA + g2 - g2/ALPHA;

b = b1/ALPHA + b2 - b2/ALPHA;



1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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