我已经使用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工作但忽略图像的透明度,所以它没用。
答案 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
才能进行裁剪。如果您有更具体的问题 - 请澄清。