调整Windows应用商店应用中的图像大小

时间:2012-12-26 21:00:59

标签: javascript windows-store-apps image-resizing

我正在尝试将图像文件复制到本地存储并调整其大小(以便在实时图块中显示它)。我主要是在修补这里,这是我的第一个Windows应用商店应用程序。到目前为止,这就是我所拥有的:

var fileStream = null;
currentPhoto.copyAsync(Windows.Storage.ApplicationData.current.localFolder, currentPhoto.name)
    .then(function (file) {
        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
    })
    .then(function (stream) {
        return Windows.Graphics.Imaging.BitmapDecoder.createAsync(stream);
    })
    .then(function (decoder) {
        fileStream = new Windows.Storage.Streams.InMemoryRandomAccessStream();
        return Windows.Graphics.Imaging.BitmapEncoder.createForTranscodingAsync(fileStream, decoder);
    })
    .then(function (encoder) {
        encoder.bitmapTransform.scaledWidth = 100;
        encoder.bitmapTransform.scaledHeight = 100;
        return encoder.flushAsync();
    })
    .then(function () {
        fileStream.close();
    })
    .done(function () {
        // do tile update
    });

在我使这个部件工作后我会计算出适当的宽高比,现在100x100可以用于测试。我在调试时注意到编码器正在检测到它是JPG文件。但是,如果我插入函数链中调用读取已保存到本地存储的文件,那么我看到它没有调整大小。因此,实时平铺更新自然会忽略它,因为它太大了。

我是否错过了尝试调整图片大小的步骤?或者可能有更简单的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

上述代码应按预期调整图像大小。但是您没有在本地存储中调整图像大小。您只是将原始图像复制到本地存储,从那里打开,然后在内存流中调整图像大小,当然,如果不修改代码,您将无法看到它。

通过对代码进行微小修改,您可以将调整后的图像保存到本地存储中,如果您正在使用的话:

var decoder = null;
var fileStream = null;
filePicker.pickSingleFileAsync()
    .then(function(file) {
        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
    })
    .then(function(stream) {
        return Windows.Graphics.Imaging.BitmapDecoder.createAsync(stream);
    })
    .then(function(dec) {
        decoder = dec;
        return Windows.Storage.ApplicationData.current.localFolder.createFileAsync("out.jpg");
    })
    .then(function(file) {
        return file.openAsync(Windows.Storage.FileAccessMode.readWrite);
    })
    .then(function (stream) {
        fileStream = stream;
        return Windows.Graphics.Imaging.BitmapEncoder.createForTranscodingAsync(stream, decoder);
    })
    .then(function(encoder) {
        encoder.bitmapTransform.scaledWidth = 100;
        encoder.bitmapTransform.scaledHeight = 100;
        return encoder.flushAsync();
    })
    .then(function() {
        fileStream.close();
    });

如果您尝试一下,您会看到在本地存储空间中创建了已调整大小的out.jpg