|
public interface IPicture
{
void SavePictureToDisk(string filename, byte[] imageData);
} |
|
private void Imageeditor_ImageSaving(object sender, ImageSavingEventArgs args)
{
args.Cancel = true;
var byteArray = GetImageStreamAsBytes(args.Stream);
DependencyService.Get<IPicture>().SavePictureToDisk("EditorImage", byteArray);
} |
|
[assembly: Xamarin.Forms.Dependency(typeof(ImageEditorTest.UWP.Picture_UWP))]
namespace ImageEditorTest.UWP
{
...
public class Picture_UWP : IPicture
{
public async void SavePictureToDisk(string fileName, byte[] bytes)
{
var stream = new Windows.Storage.Streams.InMemoryRandomAccessStream();
await stream.WriteAsync(bytes.AsBuffer());
stream.Seek(0);
var wb = new WriteableBitmap(1, 1);
wb.SetSource(stream);
await SaveImageInSystem.SaveToPngImage(wb, PickerLocationId.PicturesLibrary, "EditorImage");
}
}
public static class SaveImageInSystem
{
public static async Task<FileUpdateStatus> SaveToPngImage(this WriteableBitmap bitmap, PickerLocationId location, string fileName)
{
var savePicker = new FileSavePicker
{
SuggestedStartLocation = location
};
savePicker.FileTypeChoices.Add("Png Image", new[] { ".png" });
savePicker.SuggestedFileName = fileName;
StorageFile sFile = await savePicker.PickSaveFileAsync();
if (sFile != null)
{
CachedFileManager.DeferUpdates(sFile);
using (var fileStream = await sFile.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream);
Stream pixelStream = bitmap.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
await pixelStream.ReadAsync(pixels, 0, pixels.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore,
(uint)bitmap.PixelWidth,
(uint)bitmap.PixelHeight,
96.0,
96.0,
pixels);
await encoder.FlushAsync();
}
FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(sFile);
return status;
}
return FileUpdateStatus.Failed;
}
}
} |