我想分享一个writeablebitmap,但是当我打开共享目标应用程序时,没有图像。以下是我的代码。
private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
DataPackage requestData = e.Request.Data;
requestData.Properties.Title = "Image";
Guid encoderId;
switch (file.FileType)
{
case ".png":
encoderId = BitmapEncoder.PngEncoderId;
break;
case ".jpg":
case ".jpeg":
default:
encoderId = BitmapEncoder.JpegEncoderId;
break;
}
DataRequestDeferral deferral = e.Request.GetDeferral();
try
{
using (IRandomAccessStream stream = new InMemoryRandomAccessStream())
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, stream);
// image is the WriteableBitmap
Stream pixelStream = image.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)image.PixelWidth, (uint)image.PixelHeight, 96.0, 96.0, pixels);
await encoder.FlushAsync();
RandomAccessStreamReference rasr = RandomAccessStreamReference.CreateFromStream(stream);
requestData.Properties.Thumbnail = rasr;
requestData.SetBitmap(rasr);
}
}
catch (Exception ex)
{
NotifyUser(ex.ToString());
}
finally
{
deferral.Complete();
}
}
答案 0 :(得分:2)
请试试这个:
private async void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e)
{
DataRequestDeferral deferral = e.Request.GetDeferral();
DataPackage requestData = e.Request.Data;
requestData.Properties.Title = "Image";
IRandomAccessStream stream = new InMemoryRandomAccessStream();
Guid encoderId;
switch (file.FileType)
{
case ".png":
encoderId = BitmapEncoder.PngEncoderId;
break;
case ".jpg":
case ".jpeg":
default:
encoderId = BitmapEncoder.JpegEncoderId;
break;
}
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, stream);
Stream pixelStream = image.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)image.PixelWidth, (uint)image.PixelHeight, 96.0, 96.0, pixels);
requestData.SetBitmap(RandomAccessStreamReference.CreateFromStream(stream));
await encoder.FlushAsync();
deferral.Complete();
}