原理很简单就是用张半透明的黑色图片遮住原图! procedure Tmform.GreyBmp(image: TBitmap); var vBitmap: TBitmap ; bf: TBlendFunction; //AlphaBlend透明函数结构 begin vBitmap := TBitmap.Create ; with vBitmap do begin vBitmap.Width := image.Width ; vBitmap.Height := image.Height ; // 做一张全黑的图 Canvas.Brush.Color := clBlack ; Canvas.FillRect(Rect(0,0,vBitmap.Width,vBitmap.Height)); bf.BlendOp := AC_SRC_OVER; bf.SourceConstantAlpha := 160;//透明度 bf.BlendFlags := 0; Windows.AlphaBlend(image.Canvas.Handle,0,0,vBitmap.Width,vBitmap.Height, vBitmap.Canvas.Handle,0,0,vBitmap.Width,vBitmap.Height, bf); end; vBitmap.Free; end;