0

我试图访问应用程序的本地存储中的文件(由于访问问题)的缩略图图像时遇到了问题。和解决方法提示:如何在WinRT中生成图像的自定义缩略图图像?寻找类似于StorageFile.GetThumbnailAsync的算法

将文件从公共目录1.copying公共目录

2.注册缩略图

3.删除文件

是有益的,但速度慢时的几个文件的缩略图是必需的。

有关WinRt的thumnail generation api如何工作的任何想法(算法)都会有所帮助。

回答

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(); 
      } 
    }