alphaBlend的使用,帮忙啊(16分)

  • 主题发起人 主题发起人 阿魁
  • 开始时间 开始时间

阿魁

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button2Click(Sender: TObject);
var
bf : TBlendfunction;
c1,c2 : TCanvas;
begin
bf.BlendOp := AC_SRC_OVER;
bf.BlendFlags := 0;
bf.SourceConstantAlpha := 200;
bf.AlphaFormat := 0;
c1 := image1.Picture.Bitmap.Canvas;
c2 := image2.Picture.Bitmap.Canvas;
if windows.alphaBlend(c1.Handle,0,0,image1.Picture.Width,image1.Picture.Height,c2.Handle,0,0,image2.Picture.Width,image2.Picture.Height,bf) then
showmessage('done.')
else
showmessage('failed.');
end;

提示成功,但image1和image2全部变为空白,搞不懂怎么会事。
就这些分了,帮帮忙吧。
 
注意:这是因为你在Image上加载的是JPG格式的图象;试试加载BMP图象,就不会空白了。
 
我改成了bmp格式,这下image2不是空白了,但image1还是空白,调用返回值是true。
搞不懂哦
 
AlphaBlend()好像只能在Win2000下用!? 可惜我这没有,无法测试。
为什么不用 ScanLine()的方法呢?
如:
var
i, j: Integer;
BackPoint, ForePoint: pByteArray;
begin
for i := 0 to FBackGround.Height - 1 do
begin
BackPoint := FBackGround.ScanLine;
ForePoint := FForeGround.ScanLine;
for j := 0 to (3 * FBackGround.Width) - 1 do
ForePoint[j] := ForePoint[j] + Transparency * (BackPoint[j] - ForePoint[j]) div 100;
end;
end;
 
多人接受答案了。
 
后退
顶部