zoukankan      html  css  js  c++  java
  • windows store app 读写图片

      1 using System;
      2 using System.Threading.Tasks;
      3 using System.Runtime.InteropServices.WindowsRuntime;
      4 using Windows.Graphics.Imaging;
      5 using Windows.UI.Xaml.Media.Imaging;
      6 using Windows.Storage;
      7 using Windows.Storage.Pickers;
      8 using Windows.Storage.Streams;
      9 using System.IO;
     10 using Windows.Foundation;
     11 using System.Collections.Generic;
     12 
     13 namespace Common
     14 {
     15     public class ImageHelper
     16     {
     17         public const int THumbLength = 400;
     18         public  static Size MinSizeSupported = new Size(200, 200);
     19         public static Size MaxSizeSupported = new Size(4000, 3000);
     20 
     21         static Guid EncoderIDFromFileExtension(string strExtension)
     22         {
     23             Guid encoderId;
     24             switch (strExtension.ToLower())
     25             {
     26                 case ".jpg":
     27                 case ".jpeg":
     28                     encoderId = BitmapEncoder.JpegEncoderId;
     29                     break;
     30                 case ".bmp":
     31                     encoderId = BitmapEncoder.BmpEncoderId;
     32                     break;
     33                 case ".png":
     34                 default:
     35                     encoderId = BitmapEncoder.PngEncoderId;
     36                     break;
     37             }
     38             return encoderId;
     39         }
     40         static Guid DecoderIDFromFileExtension(string strExtension)
     41         {
     42             Guid encoderId;
     43             switch (strExtension.ToLower())
     44             {
     45                 case ".jpg":
     46                 case ".jpeg":
     47                     encoderId = BitmapDecoder.JpegDecoderId;
     48                     break;
     49                 case ".bmp":
     50                     encoderId = BitmapDecoder.BmpDecoderId;
     51                     break;
     52                 case ".png":
     53                 default:
     54                     encoderId = BitmapDecoder.PngDecoderId;
     55                     break;
     56             }
     57             return encoderId;
     58         }
     59 
     60         public async static Task<WriteableBitmap> ReadBitmap(IRandomAccessStream fileStream, string type)
     61         {
     62             WriteableBitmap bitmap = null;
     63             try
     64             {
     65                 Guid decoderId = DecoderIDFromFileExtension(type);
     66 
     67                 BitmapDecoder decoder = await BitmapDecoder.CreateAsync(decoderId, fileStream);
     68                 BitmapTransform tf = new BitmapTransform();
     69 
     70                 uint width = decoder.OrientedPixelWidth;
     71                 uint height = decoder.OrientedPixelHeight;
     72                 double dScale = 1;
     73 
     74                 if (decoder.OrientedPixelWidth > MaxSizeSupported.Width || decoder.OrientedPixelHeight > MaxSizeSupported.Height)
     75                 {
     76                     dScale = Math.Min(MaxSizeSupported.Width / decoder.OrientedPixelWidth, MaxSizeSupported.Height/decoder.OrientedPixelHeight );
     77                     width =(uint)( decoder.OrientedPixelWidth * dScale);
     78                     height = (uint)(decoder.OrientedPixelHeight * dScale);
     79 
     80                     tf.ScaledWidth = (uint)(decoder.PixelWidth* dScale); 
     81                     tf.ScaledHeight = (uint)(decoder.PixelHeight* dScale); 
     82                 }
     83 
     84                
     85                 bitmap = new WriteableBitmap((int)width, (int)height);
     86                 
     87                 
     88 
     89                 PixelDataProvider dataprovider = await decoder.GetPixelDataAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, tf,
     90                     ExifOrientationMode.RespectExifOrientation, ColorManagementMode.DoNotColorManage);
     91                 byte[] pixels = dataprovider.DetachPixelData();
     92 
     93                 Stream pixelStream2 = bitmap.PixelBuffer.AsStream();
     94 
     95                 pixelStream2.Write(pixels, 0, pixels.Length);
     96                 //bitmap.SetSource(fileStream);
     97             }
     98             catch
     99             {
    100             }
    101 
    102             return bitmap;
    103         }
    104 
    105         public async static Task<WriteableBitmap> ReadBitmap(StorageFile file)
    106         {
    107             IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
    108             WriteableBitmap bitmap = await ReadBitmap(stream, file.FileType.ToLower());
    109 
    110             return bitmap;
    111         }
    112 
    113 
    114         public async static Task<bool> SaveBitmap(IRandomAccessStream stream, Guid encoderId, WriteableBitmap bitmap, BitmapTransform bitmapTransform)
    115         {
    116             bool bSuccess = true;
    117             try
    118             {
    119                 Stream pixelStream = bitmap.PixelBuffer.AsStream();
    120 
    121                 BitmapEncoder encoder = await BitmapEncoder.CreateAsync(encoderId, stream);
    122                 if (bitmapTransform != null)
    123                 {
    124                     encoder.BitmapTransform.ScaledWidth = bitmapTransform.ScaledWidth;
    125                     encoder.BitmapTransform.ScaledHeight = bitmapTransform.ScaledHeight;
    126                     encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant;
    127                     encoder.BitmapTransform.Bounds = bitmapTransform.Bounds;
    128                 }
    129 
    130                 byte[] pixels = new byte[pixelStream.Length];
    131 
    132                 pixelStream.Read(pixels, 0, pixels.Length);
    133 
    134                 encoder.SetPixelData(
    135                     BitmapPixelFormat.Bgra8,
    136                     BitmapAlphaMode.Straight,
    137                     (uint)bitmap.PixelWidth,
    138                     (uint)bitmap.PixelHeight,
    139                     96, // Horizontal DPI
    140                     96, // Vertical DPI
    141                     pixels
    142                 );
    143                 await encoder.FlushAsync();
    144                
    145                 pixelStream.Dispose();
    146             }
    147             catch
    148             {
    149                 bSuccess = false;
    150             }
    151 
    152             return bSuccess;
    153         }
    154 
    155          async static Task<bool> SaveBitmap(StorageFile file, WriteableBitmap bitmap, BitmapTransform bitmapTransform)
    156         {
    157             bool bSuccess = true;
    158             try
    159             {
    160                 // Application now has read/write access to the saved file
    161                 Guid encoderId = EncoderIDFromFileExtension(file.FileType);
    162 
    163                 
    164                 IRandomAccessStream fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
    165 
    166                 bSuccess = await SaveBitmap(fileStream, encoderId,bitmap,bitmapTransform);
    167 
    168                 fileStream.Dispose();
    169               
    170             }
    171             catch
    172             {
    173                 bSuccess = false;
    174             }
    175 
    176             return bSuccess;
    177         }
    178 
    179         public async static Task<bool> SaveBitmap(StorageFile file, WriteableBitmap bitmap)
    180         {
    181             bool bSuccess = await SaveBitmap(file, bitmap, null);
    182             return bSuccess;
    183         }
    184 
    185         public async static Task<bool> SaveBitmapWithFilePicker(WriteableBitmap bitmap)
    186         {
    187             FileSavePicker save = new FileSavePicker();
    188             save.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
    189             save.DefaultFileExtension = ".jpg";
    190             save.SuggestedFileName = "new image";
    191             save.FileTypeChoices.Add(".bmp", new List<string>() { ".bmp" });
    192             save.FileTypeChoices.Add(".png", new List<string>() { ".png" });
    193             save.FileTypeChoices.Add(".jpg", new List<string>() { ".jpg", ".jpeg" });
    194 
    195             StorageFile savedItem = await save.PickSaveFileAsync();
    196             if (savedItem == null)
    197             {
    198                 return false;
    199             }
    200 
    201             return await SaveBitmap(savedItem, bitmap);
    202         }
    203 
    204         public async static Task<bool> SaveBitmapAsThumb(StorageFile file, WriteableBitmap bitmap, double width, double height)
    205         {
    206             BitmapTransform transform = new BitmapTransform();
    207 
    208             double ratio = Math.Min(width / bitmap.PixelWidth, height / bitmap.PixelHeight);
    209 
    210             transform.ScaledWidth = (uint)(bitmap.PixelWidth * ratio);
    211             transform.ScaledHeight = (uint)(bitmap.PixelHeight * ratio);
    212             transform.InterpolationMode = BitmapInterpolationMode.Fant;
    213 
    214             return await SaveBitmap(file, bitmap, transform);
    215         }
    216         public async static Task<bool> SaveBitmapAsThumb(StorageFile file, WriteableBitmap bitmap,  Windows.Foundation.Rect cropRect)
    217         {
    218             BitmapTransform transform = new BitmapTransform();
    219 
    220 
    221             double ratio =THumbLength/ Math.Max(cropRect.Width, cropRect.Height );
    222 
    223             transform.ScaledWidth = (uint)(bitmap.PixelWidth * ratio);
    224             transform.ScaledHeight = (uint)(bitmap.PixelHeight * ratio);
    225             transform.Bounds = new BitmapBounds()
    226             {
    227                 X = (uint)(cropRect.X * ratio),
    228                 Y = (uint)(cropRect.Y * ratio),
    229                 Width = (uint)(cropRect.Width * ratio),
    230                 Height = (uint)(cropRect.Height * ratio)
    231             };
    232             transform.InterpolationMode = BitmapInterpolationMode.Fant;
    233 
    234             return await SaveBitmap(file, bitmap, transform);
    235         }
    236     }
    237 }
  • 相关阅读:
    springmvc之异常处理DefaultHandlerExceptionResolver
    springmvc之异常处理ResponseStatusExceptionResolver
    springmvc之异常处理中ExceptionHanderExceptionResolver
    springmvc之多个拦截器方法执行的顺序
    springmvc之配置拦截器拦截相应的请求
    springmvc之自定义拦截器
    springmvc之文件上传
    springmvc之HttpMessageConverter<T>
    构建Java并发模型框架
    Java线程:线程的调度-守护线程——Java线程:线程的调度-合并——Java线程:新特征-障碍器——Java线程:大总结
  • 原文地址:https://www.cnblogs.com/Mengyl/p/3741732.html
Copyright © 2011-2022 走看看