如题,我想知道
result = ALPHA * srcPixel + ( 1 - ALPHA ) * destPixel
或者
alpha取值在[0,1]之间,0代表完全透明,1代表完全不透明
如果alpha取值在[0,255],公式改成
R = (R(a)*alpha + R(b)*(255-alpha))/255中Alpha如何得来的。另外,如果用BitBlt方法来实现透明和AlphaBlender的方法实现透明谁能提供和demo看看,谢谢
result = ALPHA * srcPixel + ( 1 - ALPHA ) * destPixel
或者
alpha取值在[0,1]之间,0代表完全透明,1代表完全不透明
如果alpha取值在[0,255],公式改成
R = (R(a)*alpha + R(b)*(255-alpha))/255中Alpha如何得来的。另外,如果用BitBlt方法来实现透明和AlphaBlender的方法实现透明谁能提供和demo看看,谢谢
这个地址似乎是本帖地址To maozefa(阿发伯):
谢谢,你的所有帖子偶都看过了哟。但是很抱歉,我不能调用gdi+,因为我们是自己在Image上画图操作的,我不知道gdi+可否在Image上有Delphi原来TImage一样的操作,如MouseMove,PolyLine....等等,你能告诉我吗?
这个地址似乎是本帖地址To maozefa(阿发伯):
谢谢,你的所有帖子偶都看过了哟。但是很抱歉,我不能调用gdi+,因为我们是自己在Image上画图操作的,我不知道gdi+可否在Image上有Delphi原来TImage一样的操作,如MouseMove,PolyLine....等等,你能告诉我吗?
我想贴的地址是
http://blog.csdn.net/jinjazz/archive/2007/11/01/1860437.aspx
bf.BlendFlags:=0;
bf.SourceConstantAlpha:=$7f;
bf.AlphaFormat:=0;
Windows.AlphaBlend(dbmp.Canvas.Handle,0,0,dbmp.Width,dbmp.Height,sbmp.canvas.Handle,0,0,sbmp.Width,sbmp.Height,bf);运行没结果,嘿嘿,我是不是照葫芦画瓢画错了呀?
var
AShadowBitmap: TBitmap;
A1stBitmap: TBitmap;
A2ndBitmap: TBitmap;
Alpha: Byte;
r, c: Integer;
begin
AShadowBitmap:= TBitmap.Create;
A1stBitmap:= TBitmap.Create;
A2ndBitmap:= TBitmap.Create;
try AShadowBitmap.Height:= 200;
AShadowBitmap.Width:= 300;
A1stBitmap.Height:= AShadowBitmap.Height;
A1stBitmap.Width:= AShadowBitmap.Width;
A2ndBitmap.Height:= AShadowBitmap.Height;
A2ndBitmap.Width:= AShadowBitmap.Width; A1stBitmap.Canvas.Pen.Width:= 10;
A1stBitmap.Canvas.Pen.Color:= clRed;
A1stBitmap.Canvas.MoveTo(0, 0);
A1stBitmap.Canvas.LineTo(300, 200); A2ndBitmap.Canvas.Pen.Width:= 10;
A2ndBitmap.Canvas.Pen.Color:= clBlue;
A2ndBitmap.Canvas.MoveTo(0, 200);
A2ndBitmap.Canvas.LineTo(300, 0); Alpha:= 200;
for r:= 0 to AShadowBitmap.Height - 1 do begin
for c:= 0 to AShadowBitmap.Width - 1 do begin
AShadowBitmap.Canvas.Pixels[c, r]:=
Round(Alpha / 255 * A1stBitmap.Canvas.Pixels[c, r] + (1 - Alpha / 255) * A2ndBitmap.Canvas.Pixels[c, r]);
end;
end; Canvas.Draw(0, 0, A1stBitmap);
Canvas.Draw(A1stBitmap.Width + 10, 0, A2ndBitmap);
Canvas.Draw(0, A1stBitmap.Height + 10, AShadowBitmap);
finally
FreeAndNil(A2ndBitmap);
FreeAndNil(A1stBitmap);
FreeAndNil(AShadowBitmap);
end;
end;
请问这样做有什么区别吗?似乎更简单了。同时感谢Dext提供的代码。我开始也是和你一样实现的,但是你的更工整了很多,呵呵