:::::_____怎样叠加两个图标?_____::::: (200分)

C

com

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把一个小一点图标叠加到另一个稍大一点图标的右下脚或右边,
该如何做?

如果能半透明的叠加那就太妙了!

谢谢
 
你想在什么地方用这种效果?如果你想在左上角或者TASKBAR上那是办不到的,
干嘛不自己先做好一个这种效果的? 如果不是,可以自己用画布的DRAW函数实现啊.
 
我是想动态的生成新的icon放到TImageList里,事先是做不了的
 
还是在事先做好上想办法吧,图标就这么多,固定做一下
 
请各位不要再发这样的回答了,如果那样做的话我有必要上这来问么?
 
取得图标的句柄,然后画上去。
 
如果用draw的方法,必须添加OnPaint事件,做起来就相对麻烦一些,只要
能达到相同的效果,可以采用下列方法:

1. 定义一个TImage,调入小图标,transparent(透明)属性为True。
2. 把TImage的Left,Top设置在在需要放小图标的地方。
3. 注意该TImage必须最后加入,以便显示在其他图标的前面。
 
透明的效果:
比如物体 A 是 x 颜色的,现在有个物体 B (颜色是 y )移到 A 上面,

如果 A 和 B 重叠的部分是显示颜色 y ,那么你会觉得 B 在 A 的上面,要

透明效果的话, 就在重叠部分的颜色取 (x + y)/2 [算法忘了,:) 也就是

x 和 y 的中间颜色, 这样的话 透明度 就是 50% ,
 
用AlphaBlend函数试一下
 
一、TreeView是支持图标叠加的,方法如下,不知是否是你想要的。
Treeview中几个与图象相关的属性:
  SelectedIndex:当节点被选中时在TimageList 中所选图像;
  OverlayIndex:选掩图(一幅图象透明地显示在另一幅图象的前面)图像;
 ImageIndex:在常态时选用的图的序号;
  StateIndex: 在StateImages这个ImageList中对应的序号,-1时不显示图象
  比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以
显示图象。在Form中放置一ImageList控件,加入几个图片,分别被Index为0,1,…
在Treeview的Image属性项填入你所加入的ImageList的控件名称。TreeNode的ImageIndex
表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。
二、还有一种方法我想是通用的。
想你的掩图也不会多,每加一次掩图就做一套新图标,含叠加后的图像,使用时你调用
就行了。
 
不知你是在什么地方要达到该效果!
因为不同的地方实现方法可能不一样!
 
图标可以转成BMP呀?
用ALPHA重叠了再转回来。
但好像DELPHI中只支持生成16色的图标,效果就差多咯。
 
procedure TForm1.Button2Click(Sender: TObject);
var
b,s:tbitmap;
begin
b:=tBitmap.create;
s:=tBitmap.create;
s.TransparentMode :=tmAuto; //可以自己设置透明色
b.LoadFromFile('c:/windows/forest.bmp'); //大的
s.LoadFromFile('c:/windows/circles.bmp'); //小的
b.canvas.copymode:=cmSrcCopy; //选择合适的
s.PixelFormat:=pf32bit; //避免调色板问题
b.PixelFormat:=pf32bit;
//b.canvas.draw(b.width-s.width,b.height-s.height,s); 另一种做法
b.Canvas.CopyRect (rect(b.width-s.width,b.height-s.height,b.width,b.height),
s.canvas,rect(0,0,s.width,s.height));
Canvas.Draw (0,0,b);
b.savetofile('d:/temp.bmp');
b.free;
s.free;
end;
 
用saneline 先读如图标然后
p是合成后的图象p1是第一个图标p2是第二个图标
p[x*3]:=abs(p1[x*3]+p2[x*3])div 2;
p[x*3+1]:=abs(p1[x*3+1]+p2[x*3+1])div 2;
p[x*3+2]:=abs(p1[x*3+2]+p2[x*3+2])div 2;
我用过的效果很好
 
用 ImageList_Draw / ImageList_DrawEx, 我就这样用
 
to kifo:
我怎么总试不成功?
 

Similar threads

D
回复
0
查看
682
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
D
回复
0
查看
621
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部