我正在尝试将图像文件复制到本地存储并调整其大小(以便在实时图块中显示它)。我主要是在修补这里,这是我的第一个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文件。但是,如果我插入函数链中调用读取已保存到本地存储的文件,那么我看到它没有调整大小。因此,实时平铺更新自然会忽略它,因为它太大了。
我是否错过了尝试调整图片大小的步骤?或者可能有更简单的方法来实现这一目标?
答案 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
。