以Xamarin格式调整图像大小

问题描述 投票:1回答:1

我创建了一个应用,用户可以在其中选择或拍照。然后,该图片将提交到Web服务,最大大小为4MB。有些图片大于此尺寸,因此我需要在提交尺寸之前调整它们的大小,以使其低于4MB的限制,但是请尽可能少地进行操作,以保持尽可能多的细节。我找不到将图像缩小到特定文件大小的内置方法,因此,到目前为止,我已经创建了一个DependencyService,并在Android和iOS中使用了特定的图像调整大小。

我为Android(与iOS类似)编写的代码如下,在该代码中,我反复将位图缩放0.9,直到达到限制为止。有更好的方法吗?:

   public byte[] ResizeImage(byte[] imageData)
        {
            var originalImage = BitmapFactory.DecodeByteArray(imageData, 0, imageData.Length);
            var resizedImage = originalImage;
            double newWidth = originalImage.Width;
            double newHeight = originalImage.Height;

            while (resizedImage.ByteCount > 4194304)
            {
                newWidth *= 0.9;
                newHeight *= 0.9;
                resizedImage = Bitmap.CreateScaledBitmap(originalImage, (int) newWidth,
                    (int) newHeight, false);
            }

            using (var ms = new MemoryStream())
            {
                resizedImage.Compress(Bitmap.CompressFormat.Jpeg, 100, ms);
                return ms.ToArray();
            }
        }
xamarin xamarin.forms
1个回答
0
投票

[我看到您使用的是JPG,但未压缩(在代码示例中,质量设置为'100')。我们也知道RGB位深度是24位/像素。鉴于此,我们有:

ImageWidthPx * ImageHeightPx * 24/8 = TotalImageSizeInBytes

您正在寻找的是:

ScaleFactor = TotalImageSizeInBytes / (ImageWidthPx * ImageHeightPx * 24/8)

以及您的情况:

var scaleFactor = 4194304 / (originalImage.Width * originalImage.Height * 3)
© www.soinside.com 2019 - 2024. All rights reserved.