是否有FMX功能在运行时设置TImage的透明色?

时间:2014-04-08 21:22:45

标签: delphi c++builder firemonkey

我在FMX(FireMonkey)的表单上有一个TImage。我想在运行时将位图加载到TImage中,其中位图应该具有由位图中第一个像素的颜色定义的透明背景。此颜色可能与位图到位图不同。

通过使用适用于TImage的MultiResBitmap编辑器,我知道如何在设计时执行此操作。但是,我找不到任何在运行时如何执行此操作的示例。我是否必须手动执行此操作(获取位图中第一个像素的颜色,然后遍历所有像素并将任何匹配设置为透明),还是有更简单的方法来执行此操作?

1 个答案:

答案 0 :(得分:1)

此功能会使用第一个像素的颜色将位图中的某种颜色设置为透明,即claNull。

void SetTransparent (Graphics::TBitmap *oBmp)
{
  TBitmapData bmpData;
  oBmp->Map (TMapAccess::maReadWrite, bmpData);

  TAlphaColor colorToMakeTransparent = bmpData.GetPixel (0, 0);
  TAlphaColor transparentColor = claNull;

  for (int x=0; x<bmpData.Width; x++)
  {
    for (int y=0; y<bmpData.Height; y++)
    {
      TAlphaColor color = bmpData.GetPixel (x, y);
      if (color == colorToMakeTransparent)
        bmpData.SetPixel (x, y, transparentColor);
    }
  }

  oBmp->Unmap (bmpData);
}
//---------------------------------------------------------------------------