我想实现这样的功能:
Abitmap:Tbitmap;Abitmap.LoadFromStream(stream);//引入一张图片。然后在这张图上画一层半透明色,
最后把这个加了一层半透明色的图片,显示到某处,或者保存为一张新图:
self.ImageControl1.Bitmap:=Abitmap;
我尝试下面的方法,画不上呢:
Abitmap.Canvas.fill.Color:=$80CD00CD;
Abitmap.Canvas.FillEllipse(arect,0.5);请教大家应该如何实现呢???我用的是firemonkey~~

解决方案 »

  1.   

    Abitmap.Canvas,只有一层图,不好办。
    建议使用PNGImage设置透明度,再
    Bitmap.Assign(Png) 
      

  2.   

    另外32位BitMap有透明通道,
    Tbitmap.transpartnecolor可以指定透明色。
      

  3.   

    。。有两种方法,方法一,就是作一张带有透明头道的PNG图片,这个图片就是纯粹的颜色,只是有透明通道,然后直接在Bitmap上吧Png画上去,这是个弱智的方法,方法二就是使用Windows自带的AlphaBlend这种融合合成函数,其实也是和方法一差不多,只是代码生成,不用自己作图。给你一个函数吧:procedure DrawAlphaByColor(DC: HDC;AlpahRect: TRect;Color: TColor;AlphaByte: Byte=100);
    var
      bmp: TBitmap;
      BF: BLENDFUNCTION;
      W,H: Integer;
    begin
      bmp := TBitmap.Create;
      W := AlpahRect.Right - AlpahRect.Left;
      H := AlpahRect.Bottom - AlpahRect.Top;
      bmp.SetSize(W,H);
      bmp.Canvas.Brush.Color := Color;
      bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
      BF.BlendOp := AC_SRC_OVER;
      BF.BlendFlags := 0;
      BF.AlphaFormat := 0;
      BF.SourceConstantAlpha := AlphaByte;
      Windows.AlphaBlend(DC,AlpahRect.Left,AlpahRect.Top,W,H,
              bmp.Canvas.Handle, 0,0,Bmp.Width, Bmp.Height,BF);
      bmp.Free;
    end;其实代码不多
    用法
    DrawAlphaByColor(bmp.Canvas.Handle,Rect(0,0,bmp.width,bmp.height),clred,50)