i have used the following method to save images in windows store apps
var saveimg= function () {
var output;
var input;
var outputStream;
var Imaging = Windows.Graphics.Imaging;
var fileval = null;
imageFile = null;
Windows.Storage.KnownFolders.picturesLibrary.createFileAsync("filename.png",
Windows.Storage.CreationCollisionOption.generateUniqueName).
then(function (file) {
fileval = file;
return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
}).then(function (stream) {
fileStream = stream;
var canvas = document.createElement('canvas');
canvas.id = "canvasid";
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
return Imaging.BitmapEncoder.createAsync(Imaging.BitmapEncoder.pngEncoderId, stream);
// return Windows.Storage.Streams.RandomAccessStream.copyAsync(input, output);
}).then(
function (encoder) {
//Set the pixel data--assume "encoding" object has options from elsewhere
// encoder.setPixelData(encoding.pixelFormat, encoding.alphaMode, encoding.width, encoding.height, encoding.dpiX, encoding.dpiY, new Uint8Array(imgData.data)); //Go do the encoding
var canvas = document.getElementById("canvasid");
var ctx = canvas.getContext("2d");
var width = document.getElementById("canvasid").width;
var height = document.getElementById("canvasid").height;
var outputPixelData = ctx.getImageData(0, 0, width, height);
encoder.setPixelData(
Imaging.BitmapPixelFormat.rgba8,
Imaging.BitmapAlphaMode.straight,
width,
height,
96, // Horizontal DPI
96, // Vertical DPI
outputPixelData.data
);
return encoder.flushAsync();
}).done(function () {
fileStream.close();
}, function () {
//Empty error handler (do nothing if the user canceled the picker)
});
}