关于 Canvas 透明的颜色!(100分)

  • 主题发起人 主题发起人 xebaobei
  • 开始时间 开始时间
X

xebaobei

Unregistered / Unconfirmed
GUEST, unregistred user!
var
temps:tbitmap;
begin
//初始化位图
temps:=tbitmap.Create;
temps.canvas.Brush.Style:=bsClear;{字体模式}
temps.LoadFromFile(funs.pdir+'spicon/select.bmp');
temps.TransparentColor:=temps.Canvas.Pixels[20,20];
temps.Transparent:=true;
form1.Canvas.CopyRect(form1.Canvas.ClipRect,temps.Canvas,temps.Canvas.ClipRect);
end;

temps.Canvas.Pixels[20,20];的颜色我确认是我要透明的颜色
但是我画上后说什么他也不是透明的!
求各位哥哥!
 
不想UP也得UP了!
都快沉了!
 
transparentblt
 
具体点好么?
 
bsClear 的意思是背景是透明色,而不是font 是透明色
字体是透明色还不知道怎么弄
 
前提不足,因你可能temps.Canvas 没有透明!
 
我想你的目的是要在FORM上显示一个透明的图片对吧?如果是的话也可以
用一个IMAGE控件来实现啊。
image1.Picture.Bitmap.TransparentColor :=颜色
image1.transparent:=true;


 
qnaqbgss,
不是的,我是想从新绘制TSTRINGGRID的选中状态,所以不能用IMAGE

我是想把一个BITMAP中的图片贴在TSTRINGGRID的一个格子上,并且图片中间的白色区域为透明,不遮盖我以前在上边画的东西!
 
如何画个有透明部分的图到一个窗体上啊!
5555555555!!!!!!!!!!
 
不是把
大家帮忙啊
这个问题郁闷我很长时间了!
 
自己解决了
分怎么给呢?
 
说说解决方法,让别人也受一下益吧
我这有个半透明效果的函数资料,你也看看吧
procedure blendColor(ACanvas: TCanvas; ARect: TRect; FColor: TColor; Value: byte);
var
w, h : integer;
bmp: TbitMap;
begin
bmp:=TbitMap.Create;
with ARect do begin
h:=Bottom-Top;
w:=Right-Left;
end;
try
with bmp do begin
height:=h;
Width:=w;
Canvas.CopyRect(Rect(0,0,w,h),ACanvas,ARect);
BlendBmp(bmp,FColor,value);
ACanvas.Draw(ARect.Top,ARect.Left,bmp);
end;
finally
bmp.Free;
end;
end;


function getAlphaColor(BackColor,ForeColor: TColor; alpha: integer): TColor;
var
R,G,B: integer;
begin
backColor:=TColor(backColor);
backColor:=colortoRGB(backColor);
ForeColor:=colortoRGB(ForeColor);
R:=(getRValue(backColor)*(255-alpha)+getRvalue(ForeColor)*alpha) div 255;
G:=(getGValue(backColor)*(255-alpha)+getGvalue(ForeColor)*alpha) div 255;
B:=(getBValue(backColor)*(255-alpha)+getBvalue(ForeColor)*alpha) div 255;
if R>255 then R:=255;
if R<0 then R:=0;
if G>255 then G:=255;
if G<0 then R:=0;
if B>255 then B:=255;
if B<0 then B:=0;
result:=RGB(R,G,B);
end;
 
var
temps:tbitmap;
begin
//初始化位图
temps:=tbitmap.Create;
temps.LoadFromFile(funs.pdir+'spicon/select.bmp');
form1.Canvas.BrushCopy(form1.Canvas.ClipRect,temps,temps.Canvas.ClipRect, Canvas.Pixels[20,20]);
end;
 
其实吧
解决办法很简单,就是设置了一下
Canvas.CopyMode
因为我的是COPYRECT方法绘的
而不是draw
所以设置drawMode没用
 
后退
顶部