Bitmap.MakeTransparent for Windows应用商店

本文关键字:应用 Windows MakeTransparent for Bitmap | 更新日期: 2023-09-27 18:26:40

在Winforms中,我们有一个Bitmap.MakeTransparent方法来将颜色设置为透明。UWP中有等效的方法吗?(对于WriteableBitmapSoftwareBitmap等)

Bitmap.MakeTransparent for Windows应用商店

有几种方法可以实现这一点:

首先,如果你使用位图作为UI控件的图像刷,你可以根据你的要求设置它的不透明度。一个简单的演示如下:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
   <Rectangle x:Name="rct" Width="800" Height="800">
      <Rectangle.Fill>
       <ImageBrush x:Name="ib" ImageSource="Assets//hero.bmp" Stretch="Uniform" Opacity="0.5"/>
      </Rectangle.Fill>
   </Rectangle>
</Grid>

第二种方法是使用Windows映像组件。在这里,您可以找到有关将Direct2D和WIC图像一起使用的示例。以下是两个简单的解决方案:

1) 使用IWICFormatConverter接口。

在IWICFormatConverter.Initialize()中,根据您的要求设置Alpha阈值:AlphaThreshold值用于确定转换后的格式中映射到完全透明颜色的不透明度级别。值9.8意味着alpha值小于25的任何像素都将映射到透明颜色。值100将所有不完全不透明的像素映射为透明颜色。然后你可以用D2D绘制位图。

 hr = m_pConvertedSourceBitmap->Initialize(
           pFrame,                          // Input bitmap to convert
           GUID_WICPixelFormat32bppPBGRA,   // Destination pixel format
           WICBitmapDitherTypeNone,         // Specified dither pattern
           NULL,                            // Specify a particular palette 
           0.f,                             // Alpha threshold
           WICBitmapPaletteTypeCustom       // Palette translation type
           );

2) 为IWICBitmap的指定矩形获取IWICBitmapLock,然后处理现在由IWICBitmapLock对象锁定的像素数据。

当然,还有其他解决方案,例如使用可写位图直接操作图像像素。下面是一个在PixelDataProvider类的帮助下访问像素的示例,该类用于访问位图中的像素。

然而,除了XAML UI元素,Bitmap.MakeTransparent还没有简单的替代品。所以这一切都取决于你的使用模型。