作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 FileOpenPicker 加载图像并将其保存到 WritableBitmap 以便稍后使用。它可以工作,但是当我加载高分辨率图像(例如 jpg 2592x3888 )时,我的应用程序崩溃了。而且处理大图像需要很长时间。所以我的问题是:我在这里做错了什么?什么是最好的方法?
StorageFile file = args.Files[0];
using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
{
App.context.Image = new WriteableBitmap(1, 1);
stream.Seek(0);
int width = (int)Frame.ActualWidth;
int height = (int)Frame.ActualHeight;
App.context.Image = await BitmapFactory.New(1, 1).FromStream(stream);
App.context.Image = App.context.Image.Resize(width, height, WriteableBitmapExtensions.Interpolation.NearestNeighbor);
this.Frame.Navigate(typeof(RecognizingPage));
}
PS:这确实是一个工作版本 - 我不会使用这个宽度和高度。
最佳答案
您可以使用以下代码解码图像以获得较低的分辨率。
using (var storageStream = await storageFile.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, storageStream);
var pixelStream = yourWriteableBitmap.PixelBuffer.AsStream();
var pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)yourWriteableBitmap.PixelWidth, (uint)yourWriteableBitmap.PixelHeight, 48, 48, pixels);
await encoder.FlushAsync();
}
您可以引用这个问题了解更多详情: WriteableBitmap SaveJpeg missing for universal apps
关于windows-phone - 如何在 Windows Phone 8.1 中处理高分辨率照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793041/
我是一名优秀的程序员,十分优秀!