Windows 8 XAML:为图像对象着色
本文关键字:对象 图像 XAML Windows | 更新日期: 2023-09-27 18:34:13
我有一个图像对象。图像源是具有透明度的白色图形(准确地说是圆角矩形)。我希望能够在不同的地方重复使用相同的图像,但为该图像着色不同的颜色。到目前为止,我发现的最佳建议是在顶部绘制一个半透明的矩形,但这将显示在透明度所在的角落。谁能提出更好的选择?
使用 BitmapDecoder
您可以获得包含所有像素数据的字节数组,然后您可以通过偏移一些 ARGB 值来手动更改它并将其保存在新WriteableBitmap
中:
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".jpg");
StorageFile file = await picker.PickSingleFileAsync();
if (file != null)
{
using (IRandomAccessStream ras = await file.Openasync(FileAccessMode.Read))
{
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(ras);
PixelDataProvider provider = await decoder.GetPixelDataAsync(decoder.BitmapPixelFormat, decoder.BitmapAlphaMode, new BitmapTransform(), ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb);
byte[] pixels = provider.DetachPixelData();
for (int i = 0; i < pixels.Length; i += 4)
{
pixels[i] = (byte)(pixels[i] + 72);
}
WriteableBitmap bitmap = new WriteableBitmap((int)decoder.OrientedPixelWidth, (int)decoder.OrientedPixelHeight);
using (Stream stream = bitmap.PixelBuffer.AsStream())
{
await stream.WriteAsync(pixels, 0, pixels.Length);
}
image.Source = bitmap;
}
}