我一直在开发应用程序,将Microsoft Bing Image设置为壁纸,但出于某种原因,代码可以在移动设备上运行,但似乎无法在桌面上运行。
以下是设置壁纸的主要代码:
注意: imageViewModel.Bitmap 是一种 WriteableBitmap
const string fileName = "start_temp.jpg";
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
Stream pixelStream = imageViewModel.Bitmap.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore,
(uint)imageViewModel.Bitmap.PixelWidth, (uint)imageViewModel.Bitmap.PixelHeight, 96.0, 96.0, pixels);
await encoder.FlushAsync();
}
if (await Windows.System.UserProfile.UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(file))
{
showToastNotification("Start background image set successfull!");
}
这些代码在移动设备上完美运行,但在桌面设备上却不一样。我使用 UserProfilePersonalizationSettings.IsSupported() 并确认支持该设备。
我不知道为什么上面的代码不适用于desktop =(
以下是我下载图片的代码:
private async Task<WriteableBitmap> loadImage(string url)
{
var response = await new HttpClient().GetAsync(url);
byte[] imageByte = await response.Content.ReadAsByteArrayAsync();
WriteableBitmap bitmap = new WriteableBitmap(1920, 1080);
using (InMemoryRandomAccessStream randomStream = new InMemoryRandomAccessStream())
{
using (DataWriter writer = new DataWriter(randomStream))
{
writer.WriteBytes(imageByte);
await writer.StoreAsync();
await writer.FlushAsync();
writer.DetachStream();
}
randomStream.Seek(0);
await bitmap.SetSourceAsync(randomStream);
}
return bitmap;
}
答案 0 :(得分:-1)
在两个差异设备上测试我的应用程序并且工作正常后,我的PC似乎遇到了TrySetWallpaperImageAsync
或TrySetLockscreenImageAsync
API的问题。
经过一番研究后,问题是开发人员环境问题,我的PC上的Visual Studio / Windows SDK在运行代码时遇到了一些问题。
我部署了一个软件包并将其安装在我的电脑上,一切都很好。