我在TImage控件中用圆角矩形区域画了一张图片,但是图片的圆角部分还是白色的,如何能把这部分变透明呢,TIMAGE的透明属性我是设了的?紧急求助!
代码如下:
var
  bmp:TBitmap;
  Rhandle:HRGN;
begin
  bmp:=TBitmap.Create;
  bmp.LoadFromFile(C_BMPFILE);  Rhandle:=CreateRoundRectRgn(0,0,img1.Width,img1.Height,20,20);
  SelectclipRgn(img1.Canvas.Handle,rHandle);
  img1.Canvas.Draw(0,0,bmp);
  deleteObject(Rhandle);
end;
  效果如图:
    
希望图没挂,~

解决方案 »

  1.   

    试过了,不行~
    Img1.Transparent := True;
    这个应该是要求图片有透明色的,但是这张图片没有
      

  2.   

    var
      bmp:TBitmap;
      bmpBuffer:TBitmap;
      Rhandle:HRGN;
    begin
      bmp:=TBitmap.Create;
      bmpBuffer:=TBitmap.Create;
      bmp.LoadFromFile('areo.bmp');
      Image1.Transparent:=True;
      Rhandle:=CreateRoundRectRgn(0,0,Image1.Width,Image1.Height,20,20);
      bmpBuffer.SetSize(Image1.Width,Image1.Height);
      bmpBuffer.Canvas.Brush.Color:=clBlack;
      bmpBuffer.Canvas.Brush.Style:=bsSolid;
      bmpBuffer.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height));
      try
        SelectClipRgn(bmpBuffer.Canvas.Handle,rHandle);
        bmpBuffer.Canvas.Draw(0,0,bmp);
        bmpBuffer.Canvas.Brush.Style:=bsClear;
        Image1.Picture.Assign(bmpBuffer);
      finally
        DeleteObject(Rhandle);
      end;
      bmpBuffer.Free;
      bmp.Free;
    唉,分太少了...特意帮你看了一下..
      

  3.   

      img1.Canvas.Brush.Style := bsClear;
      img1.Picture.Bitmap.TransparentColor := clWhite;
      img1.Picture.Bitmap.Transparent      := True;
    这些都去试试吧!
      

  4.   

    准备一个缓存位图,
    透明区域底色填充为黑色,
    将图片绘制缓存上,
    再将TImage的Transparent设置为True,
    将缓存位图赋给TImage的Picture ....
      

  5.   

    位图的默认TransparentColor为clBlack..
      

  6.   

    用DelphiTeacher的方法可以了,gobiz的方法试了下,还没有对,我取透明色为img1.canvas.pixels[0,0],也是不行~
    暂时先用老师的方法了~
    PS:CSDN还是很有爱的,再次感谢2位大虾。
      

  7.   

    var
      bmp:TBitmap;
      Rhandle:HRGN;
    begin
      bmp:=TBitmap.Create;
      bmp.LoadFromFile(C_BMPFILE);
      img1.Canvas.Brush.Color:=clRed;
      img1.Canvas.FillRect(img1.ClientRect);
      Rhandle:=CreateRoundRectRgn(0,0,img1.Width,img1.Height,20,20);
      SelectclipRgn(img1.Canvas.Handle,rHandle);
      Canvas.Draw(img1.Left,img1.Top,bmp);
      img1.Canvas.Draw(0,0,bmp);
      deleteObject(Rhandle);
      img1.Canvas.Brush.Style := bsClear;
      img1.Picture.Bitmap.TransparentColor := clRed;
      img1.Picture.Bitmap.Transparent      := True;
      img1.Transparent:=True;这种方法也可以,其实跟gobiz的方法一样,显示填充img1的颜色为clred,然后再将透明色设置为clred,同样搞定了,又学到了一点~