BitmapImage METRO重用WPF代码

时间:2014-05-19 07:30:33

标签: c# microsoft-metro bitmapimage writeablebitmap

我已经使用IronPython和WPF编写了一个小游戏用于教学目的,现在我想将项目翻译成Metro APP以测试共享项目。

有罪的代码是:

def LoadImage(name, sourceRect):
    bmp = BitmapImage()
    bmp.BeginInit()
    bmp.UriSource = Uri("./data/images/" + name, UriKind.Relative)
    bmp.SourceRect = sourceRect
    bmp.EndInit()
    image = Image()
    image.Source = bmp
    return image

在地球上我如何在Metro应用程序中获得相同的结果(使用C#)?必须有一种方法可以像旧的BitmapImage一样以简单的方式执行此操作。我需要这个,因为我有平铺图像,我想要显示它的一部分。 WriteableBitmap工作但忽略图像的透明度,所以它没用。

1 个答案:

答案 0 :(得分:0)

我一直在使用此代码加载缩放的图片:

    public static async Task SetSourceAsync(
        this WriteableBitmap writeableBitmap,
        IRandomAccessStream streamSource,
        uint decodePixelWidth,
        uint decodePixelHeight)
    {
        var decoder = await BitmapDecoder.CreateAsync(streamSource);

        using (var inMemoryStream = new InMemoryRandomAccessStream())
        {
            var encoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, decoder);
            encoder.BitmapTransform.ScaledWidth = decodePixelWidth;
            encoder.BitmapTransform.ScaledHeight = decodePixelHeight;
            await encoder.FlushAsync();
            inMemoryStream.Seek(0);

            await writeableBitmap.SetSourceAsync(inMemoryStream);
        }
    }

您可以使用类似的内容,但是您需要指定encoder.BitmapTransform.Bounds而不是ScaledWidth/Height才能进行裁剪。如果您有更具体的问题 - 请澄清。