2016-07-28 3 views
0

У меня проблема с размещением изображения с уменьшенным масштабом. Изображение растрировано, и я не знаю, как найти его правильно.UWP - поврежденное изображение повреждено

Можно ли разместить изображение без потери качества?

Damaged imaged after down-scale

Код:

public async Task<BitmapImage> BitmapTransform(string filePath, uint width) 
     { 

      StorageFile file = await StorageFile.GetFileFromPathAsync(filePath); 
      if (file == null) 
       return null; 

      // create a stream from the file and decode the image 
      var fileStream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
      BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream); 


      // create a new stream and encoder for the new image 
      InMemoryRandomAccessStream ras = new InMemoryRandomAccessStream(); 
      BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(ras, decoder); 


      double ration = 
      enc.BitmapTransform.ScaledWidth = width; 
      enc.BitmapTransform.ScaledHeight = (uint)(((double)decoder.PixelHeight/(double)decoder.PixelWidth) * (double)width); 


      // write out to the stream 
      try 
      { 
       await enc.FlushAsync(); 
      } 
      catch (Exception ex) 
      { 
       string s = ex.ToString(); 
      } 

      // render the stream to the screen 
      BitmapImage bImg = new BitmapImage(); 
      bImg.SetSource(ras); 
      return bImg; 

     } 
+1

Вы не можете масштабировать изображение, а не масштабировать изображение одновременно. Масштабирование изображения будет ** всегда ** влиять на качество изображения, и единственным способом не повлиять на качество изображения является не масштабирование изображения. Это должно быть немедленно очевидным. – IInspectable

+0

, но он не является высококлассным до более чем 100%, он изменяет размер до 50% в зависимости от разрешения экрана. – DiDinko

+0

Масштабирование изображения вниз означает потерю информации. Это приводит к ухудшению качества изображения. Если бы это было не так, мы бы просто сжимали все наши файлы, чтобы занять 0 байт дискового пространства, сохраняя при этом всю информацию. Я не знаю, почему это не очевидно для вас. – IInspectable

ответ

1

Вы можете выбрать способ изменения размера - ближайший сосед, линейный, Cubic, Фант - по BitmapTransform.InterporationMode собственности. Вы пробовали?

https://msdn.microsoft.com/en-us/library/windows/apps/windows.graphics.imaging.bitmaptransform.interpolationmode

 double ration = 
     enc.BitmapTransform.ScaledWidth = width; 
     enc.BitmapTransform.ScaledHeight = (uint)(((double)decoder.PixelHeight/(double)decoder.PixelWidth) * (double)width); 
     enc.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Cubic; // <----- Set the Interporation mode here 

Но качество результата меняется. Это зависит от исходного изображения.

+0

Это не сработало. Ширина изображения превышает 4000 пикселей, и мне нужно масштабировать изображение до 1366 пикселей и т. Д. Просто подготовьтесь к каждому разрешению экрана. – DiDinko

Смежные вопросы