在绘制位图时,Delphi 2007和2010之间存在差异

时间:2010-11-30 08:40:36

标签: delphi delphi-2010 delphi-2007 transparent tbitmap

以下代码与Delphi 2007一样正常工作。它从图像列表中获取一个位图,在其上绘制一个红色X,并将新位图添加到同一图像列表的末尾:

  DynBmp:=Graphics.TBitMap.Create;
  DynBmp.Transparent:=TRUE;
  DynBmp.TransparentMode:=tmFixed;
  ImgList.GetBitmap(9, DynBmp);
  DynBmp.TransparentColor:=DynBmp.canvas.pixels[0, DynBmp.Height - 1];
  DynBmp.Canvas.MoveTo(1, 1);
  DynBmp.Canvas.Pen.Style:=psAlternate; //psSolid;
  DynBmp.Canvas.Pen.Color:=clRed;
  DynBmp.Canvas.Pen.Width:=2;
  DynBmp.Canvas.LineTo(DynBmp.Width - 1, DynBmp.Height - 1);
  DynBmp.Canvas.MoveTo(DynBmp.Width - 1, 1);
  DynBmp.Canvas.LineTo(1, DynBmp.Height - 1);
  FErrBmpIdx:=ImgList.AddMasked(DynBmp, DynBmp.TransParentColor);
  aResetIcon.ImageIndex:=FErrBmpIdx;
  FreeAndNil(DynBmp);

在Delphi 2010上,使用相同的代码,红色X变成透明的X.我需要添加/更改哪些内容才能使Delphi 2010按预期工作?感谢

2 个答案:

答案 0 :(得分:2)

我遇到了与Delphi XE2相同的问题,并通过取消选中ImageList编辑器中的“使用带有alpha通道的XP风格图像”选项来修复它。如果您已选中该选项,则取消选中它。

答案 1 :(得分:0)

DynBmp.TransParentColor可能会再次添加到图像列表之前。也许TransparentMode不再是tmFixed?尝试根据您的发现调试并修复代码。