图片叠加,上面一张图片按一定比例透明,求快一点的算法,只用VCL实现,急

A_Bao 2005-02-18 02:40:37
小弟接一活,有部分用到标题所说的效果,我自己是用循环一个点一个点的按下面工式实现的。很慢,有没有快速的算法。工式如下:

前景r*百分比+背景r*(1-百分比)
前景g*百分比+背景g*(1-百分比)
前景b*百分比+背景b*(1-百分比)
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_Bao 2005-02-19
  • 打赏
  • 举报
回复
我自己尝试用openGL吧,VCL达不到要求
A_Bao 2005-02-19
  • 打赏
  • 举报
回复
我试试
海天候 2005-02-19
  • 打赏
  • 举报
回复
或者用gif组件,可以控制透明,你可以把底图放下面,gif图放上面重叠,然后拷屏一次就OK了
海天候 2005-02-19
  • 打赏
  • 举报
回复
建议用ImageEn组件可以实现你的要求
A_Bao 2005-02-18
  • 打赏
  • 举报
回复
明晚9:00结帖
A_Bao 2005-02-18
  • 打赏
  • 举报
回复
这个我知道,但是ScanLine不能正确处理256色的图片,我试过。我可不能要求图片一定是真彩呀。
解释一下公式
前景r、前景g、前景b分别是前面那张图片的三原色的16位值,由图片的每个像素TColor值求得,背景就是后面那张图片。

chijingde 2005-02-18
  • 打赏
  • 举报
回复
没看懂你的公式
前景背景是什么东西啊?

不过也无所谓,如果你一个点一个点画成功的话
有个方法可以极大地提高效率
那就是用ScanLine

var
p3:pbyteArray;
begin
with Bitmap do
for j:=0 to Height-1 do
begin
P:=ScanLine[j];
for i:=0 to width-1 do
begin
p[i* 3]:= //兰
P[i* 3 + 1]:= //绿
P[i* 3 + 2]:= //红
end;
end;
end;

你可以试一下
A_Bao 2005-02-18
  • 打赏
  • 举报
回复
我顶,求助中。。。

1,183

社区成员

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

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