Bitmap.MakeTransparent for Windows应用商店
本文关键字:应用 Windows MakeTransparent for Bitmap | 更新日期: 2023-09-27 18:26:40
在Winforms中,我们有一个Bitmap.MakeTransparent
方法来将颜色设置为透明。UWP中有等效的方法吗?(对于WriteableBitmap
或SoftwareBitmap
等)
有几种方法可以实现这一点:
首先,如果你使用位图作为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还没有简单的替代品。所以这一切都取决于你的使用模型。