求救: 如何画出反白的效果(50分)

  • 主题发起人 主题发起人 一点半
  • 开始时间 开始时间

一点半

Unregistered / Unconfirmed
GUEST, unregistred user!
写了一个组件,上面已经用图片刷上了,现在要画出选中的效果,如何去做?
 
找一种颜色比如深蓝去xor一下就可以了,还原时再xor
 
同意楼上的,我也这样做的
 
to eyes4,能否说详细点?
 
with form1.canvas do
begin
pen.color := clRed;
pen.Width := 3;
brush.Style := bsClear;
Ellipse(50,50,100,100);
end;
 
用mask行不行。叫啥遮罩
 
你要反白也可以:
Canvas.copyMode设定为cmDstInvert 就可以
具体代码我就不说了,不同的Canvas.copyMode有不同的效果。

我建议用半透明,我选定的区域一半用半透明。好看。
 
用 NotXor 的方式就可以画出反白的效果了。
Pen.Mode = pmNotXor;
 
to xuxiaohan,
能否说说半透明的实现?
 
我给你两个过程,搞定半透明效果;我还有将图片半透明叠加的,象photoshop的蚂蚁在爬的选定效果的过程,下次再给你
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;
 
接受答案了.
 
后退
顶部