UWP - 缩放图像已损坏

时间:2016-07-28 10:57:37

标签: c# windows xaml 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 个答案:

答案 0 :(得分:1)

您可以通过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

但结果的质量各不相同。这取决于原始图像。