private WriteableBitmap _bitmap;
private async void On_Open(object sender, RoutedEventArgs e)
{
var open = new FileOpenPicker()
{
SuggestedStartLocation = PickerLocationId.PicturesLibrary,
ViewMode = PickerViewMode.Thumbnail,
FileTypeFilter = { ".bmp", ".png", ".jpeg", ".jpg" }
};
// Open a stream for the selected file
StorageFile file = await open.PickSingleFileAsync();
IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
Guid decoderId;
switch (file.FileType.ToLower())
{
case ".jpg":
case ".jpeg":
decoderId = BitmapDecoder.JpegDecoderId;
break;
case ".bmp":
decoderId = BitmapDecoder.BmpDecoderId;
break;
case ".png":
decoderId = BitmapDecoder.PngDecoderId;
break;
default:
return;
}
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(decoderId, fileStream);
int width = (int)decoder.PixelWidth;
int height = (int)decoder.PixelHeight;
PixelDataProvider dataprovider = await decoder.GetPixelDataAsync();
byte[] pixels = dataprovider.DetachPixelData();
_bitmap = new WriteableBitmap(width, height);
Stream pixelStream = _bitmap.PixelBuffer.AsStream();
//rgba in original
//to display ,convert to bgra
for (int i = 0; i < pixels.Length; i += 4)
{
byte temp = pixels[i];
pixels[i] = pixels[i + 2];
pixels[i + 2] = temp;
}
pixelStream.Write(pixels, 0, pixels.Length);
this.Image.Source = _bitmap;
}
private async void On_Save(object sender, RoutedEventArgs e)
{
FileSavePicker save = new FileSavePicker();
save.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
save.DefaultFileExtension = ".jpg";
save.SuggestedFileName = "new image";
save.FileTypeChoices.Add(".bmp", new List<string>() { ".bmp" });
save.FileTypeChoices.Add(".png", new List<string>() { ".png" });
save.FileTypeChoices.Add(".jpg", new List<string>() { ".jpg", ".jpeg" });
StorageFile savedItem = await save.PickSaveFileAsync();
try
{
// Application now has read/write access to the saved file
Guid encoderId;
switch (savedItem.FileType.ToLower())
{
case ".jpg":
encoderId = BitmapEncoder.JpegEncoderId;
break;
case ".bmp":
encoderId = BitmapEncoder.BmpEncoderId;
break;
case ".png":
default:
encoderId = BitmapEncoder.PngEncoderId;
break;
}
IRandomAccessStream fileStream = await savedItem.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, fileStream);
Stream pixelStream = _bitmap.PixelBuffer.AsStream();
byte[] pixels = new byte[pixelStream.Length];
pixelStream.Read(pixels, 0, pixels.Length);
//pixal format should convert to rgba8
encoder.SetPixelData(
BitmapPixelFormat.Rgba8,
BitmapAlphaMode.Straight,
(uint)_bitmap.PixelWidth,
(uint)_bitmap.PixelHeight,
96, // Horizontal DPI
96, // Vertical DPI
pixels
);
await encoder.FlushAsync();
}
catch(Exception e1)
{
}
}