Разница между Delphi 2007 и 2010 при рисовании растровых изображений - PullRequest
1 голос
/ 30 ноября 2010

Следующий код работает должным образом с 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 ]

2 голосов
/ 25 июня 2012

Я столкнулся с той же проблемой с Delphi XE2 и исправил ее, сняв флажок « Использовать изображение в стиле XP с альфа-каналом » в редакторе ImageList.Если вы отметили эту опцию, просто снимите ее.

0 голосов
/ 30 ноября 2010

DynBmp.TransParentColor, вероятно, очищается, прежде чем вы снова добавите его в список изображений. Может быть, TransparentMode больше не является tmFixed? Попробуйте отладить и исправить ваш код в соответствии с вашими выводами.

...