C# Windows 8 XAML:为图像对象着色

C# Windows 8 XAML:为图像对象着色,c#,xaml,windows-runtime,windows-store-apps,winrt-xaml,C#,Xaml,Windows Runtime,Windows Store Apps,Winrt Xaml,我有一个图像对象。图像源是一个透明的白色图形(精确地说是一个圆角矩形)。我想要的是能够在不同的地方重复使用相同的图像,但将该图像着色为不同的颜色。到目前为止,我发现最好的建议是在顶部画一个半透明的矩形,但这会显示在透明的角落。有人能推荐更好的替代方案吗?使用位图解码器可以获得包含所有像素数据的字节数组,然后可以通过偏移一些ARGB值手动更改它,并将其保存在新的可写位图中: var picker = new FileOpenPicker(); picker.FileTypeFilter.Add("

我有一个图像对象。图像源是一个透明的白色图形(精确地说是一个圆角矩形)。我想要的是能够在不同的地方重复使用相同的图像,但将该图像着色为不同的颜色。到目前为止,我发现最好的建议是在顶部画一个半透明的矩形,但这会显示在透明的角落。有人能推荐更好的替代方案吗?

使用
位图解码器
可以获得包含所有像素数据的字节数组,然后可以通过偏移一些ARGB值手动更改它,并将其保存在新的
可写位图中

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;
    }
}
var-picker=new-FileOpenPicker();
picker.FileTypeFilter.Add(“.jpg”);
StorageFile file=wait picker.PickSingleFileAsync();
如果(文件!=null)
{
使用(irandomaccesstream ras=await file.Openasync(FileAccessMode.Read))
{
BitmapDecoder解码器=等待BitmapDecoder.CreateAsync(ras);
PixelDataProvider provider=await decoder.GetPixelDataAsync(decoder.BitmapPixelFormat,decoder.BitmapAlphaMode,new BitmapTransform(),ExifOrientationMode.RespectExifOrientation,ColorManagementMode.ColorManagetoRGB);
byte[]pixels=provider.DetachPixelData();
对于(int i=0;i
通过圆角矩形,是否可以使用边框/拐角半径或矩形/半径X/Y复制形状,从而允许您使用您已经收到的“顶部”建议?如果是这样的话,我们可以将其快速转换为ContentControl,并允许您非常轻松地指定颜色色调。如果它是一个更定制的形状,你可能会看到更多的努力。我认为它需要更复杂的东西。我在图像中添加了浮雕效果,其中一些形状可能比简单的圆形矩形更复杂。