2015-10-01 1 views
0

У меня есть этот кусок кода, который извлекает изображение из веб-сервиса и сохраняет его в StorageFileИзменение размера изображения в байтах [] к другому размеру изображения также в байтах [] - Windows 8

StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(Constants.DataDirectory, CreationCollisionOption.OpenIfExists); 
StorageFile imgFile; 

using (var httpClient = new HttpClient { BaseAddress = Constants.baseAddress }) 
{ 
    string token = App.Current.Resources["token"] as string; 
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); 

    using (var response2 = await httpClient.GetAsync("user/image?userId=" + id)) 
    { 
     Stream imageStream = await response2.Content.ReadAsStreamAsync(); 
     if (imageStream.Length != 0) 
     { 
      byte[] bytes = new byte[imageStream.Length]; 
      imageStream.Read(bytes, 0, (int)imageStream.Length); 
      imgFile = await folder.CreateFileAsync(fname, CreationCollisionOption.ReplaceExisting); 
      await FileIO.WriteBytesAsync(imgFile, bytes); //i want the image bytes to be of a smaller version of the image at this point 
     } 
     return await response2.Content.ReadAsStringAsync(); 
    } 
} 

Я бы как узнать, есть ли способ конвертировать изображение bytes[] в миниатюру (например, 50x50), прежде чем записывать их в StorageFile.

+0

Проверьте решение, которое я предложил здесь: http://stackoverflow.com/questions/32792626/reduce-image-size-physical-and-dimensions-coming-from-httppostedfilebase- then – Lorek

ответ

1

Вот код, чтобы изменить размер изображения потока:

   var decoder = await BitmapDecoder.CreateAsync(stream); 

       var pixels = await decoder.GetPixelDataAsync(); 

       var file = await folder.CreateFileAsync($"{_oriFile.DisplayName}_{size}.png",CreationCollisionOption.GenerateUniqueName); 
       using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
       { 

        var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream); 

        encoder.BitmapTransform.ScaledWidth = size; 
        encoder.BitmapTransform.ScaledHeight = size; 

        encoder.SetPixelData(
         decoder.BitmapPixelFormat, 
         decoder.BitmapAlphaMode, 
         decoder.PixelWidth, decoder.PixelHeight, 
         decoder.DpiX, decoder.DpiY, 
         pixels.DetachPixelData()); 

        encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant; 

        await encoder.FlushAsync(); 
       } 

Когда вы получаете поток изображения, вы должны сделать изменения размера вещь, прежде чем сохранить его в StorageFile. Конечно, вы можете это сделать позже, после сохранения в StorageFile.