当我尝试访问应用程序本地存储中的文件缩略图时(由于访问问题),我遇到了一个问题。解决方法建议:
1.将文件复制到公共目录
2.get thumbnail image
3.从公共目录中删除文件
很有帮助,但是当需要几个文件的缩略图时很慢。
关于WinRt的thumnail生成api如何工作的任何想法(算法)都会有所帮助。
答案 0 :(得分:0)
此任务应该从图像文件创建5倍小的缩略图文件:
private async Task SaveImageAsync(StorageFile inputFile, StorageFile outputFile)
{
Guid encoderId = BitmapEncoder.JpegEncoderId;
using (IRandomAccessStream inputStream = await inputFile.OpenAsync(FileAccessMode.Read),
outputStream = await outputFile.OpenAsync(FileAccessMode.ReadWrite))
{
outputStream.Size = 0;
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(inputStream);
BitmapTransform transform = new BitmapTransform();
double scalefactor = 0.2; // 5 times smaller
transform.ScaledHeight = (uint)(decoder.PixelHeight * scalefactor);
transform.ScaledWidth = (uint)(decoder.PixelWidth * scalefactor);
transform.InterpolationMode = BitmapInterpolationMode.Fant;
BitmapPixelFormat format = decoder.BitmapPixelFormat;
BitmapAlphaMode alpha = decoder.BitmapAlphaMode;
PixelDataProvider pixelProvider = await decoder.GetPixelDataAsync(format, alpha, transform,
ExifOrientationMode.RespectExifOrientation, ColorManagementMode.ColorManageToSRgb);
byte[] pixels = pixelProvider.DetachPixelData();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, outputStream);
encoder.SetPixelData(
format,
alpha,
(uint)((double)decoder.PixelWidth * scalefactor),
(uint)((double)decoder.PixelHeight * scalefactor),
decoder.DpiX,
decoder.DpiY,
pixels
);
await encoder.FlushAsync();
}
}