مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

zeyton

عضویت از 1394/09/30

سایز عکس

  • یکشنبه 10 مرداد 1395
  • 22:21
تشکر میکنم

سلام من از اینتت برای انتخاب عکس از گالری یا دوربین استفاده کردم و مشکلی نداره فقط چون ممکن هست عکسی که از طریق دوربین یا گالری انتخاب میشه حجمش زیاد باشه راهی هست که در اندروید حجم مشخصی در نظر بگیرم یعنی اگر بیشتر از اندازه خاصی باشه یا پیغام بده و یا اینکه خود برنامه سایزش رو کم کنه؟

پاسخ های این پرسش

تعداد پاسخ ها : 4 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • دوشنبه 11 مرداد 1395
  • 08:26

با کد زیر میتونید تصاویر را تغییر سایز دهید و حجمشون رو کم کنید

public void ResizeImage(string sourceFile, string targetFile, float maxWidth, float maxHeight)
{ 
    if (!File.Exists(targetFile) && File.Exists(sourceFile))
    {   
        // First decode with inJustDecodeBounds=true to check dimensions
        var options = new BitmapFactory.Options()
        {
            InJustDecodeBounds = false,
            InPurgeable = true,
        };

        using (var image = BitmapFactory.DecodeFile(sourceFile, options))
        {  
            if (image != null)
            {
                var sourceSize = new Size((int)image.GetBitmapInfo().Height, (int)image.GetBitmapInfo().Width);

                var maxResizeFactor = Math.Min(maxWidth / sourceSize.Width, maxHeight / sourceSize.Height);

                string targetDir = System.IO.Path.GetDirectoryName(targetFile);
                if (!Directory.Exists(targetDir))
                    Directory.CreateDirectory(targetDir);

                if (maxResizeFactor > 0.9)
                { 
                    File.Copy(sourceFile, targetFile);
                }
                else
                { 
                    var width = (int)(maxResizeFactor * sourceSize.Width);
                    var height = (int)(maxResizeFactor * sourceSize.Height);

                    using (var bitmapScaled = Bitmap.CreateScaledBitmap(image, height, width, true))
                    {
                        using (Stream outStream = File.Create(targetFile))
                        {
                            if (targetFile.ToLower().EndsWith("png"))
                                bitmapScaled.Compress(Bitmap.CompressFormat.Png, 100, outStream);
                            else
                                bitmapScaled.Compress(Bitmap.CompressFormat.Jpeg, 95, outStream);
                        }
                        bitmapScaled.Recycle();
                    }
                }

                image.Recycle();
            }
            else
                Log.E("Image scaling failed: " + sourceFile);
        }
    }
}

 

کاربر سایت

zeyton

عضویت از 1394/09/30

  • دوشنبه 11 مرداد 1395
  • 23:15

ببخشید من این تابع رو اضافه کردم ولی خطا میده ممکنه یکم راهنمایی بکنید خیلی لازم دارم 

کاربر سایت

zeyton

عضویت از 1394/09/30

  • چهارشنبه 13 مرداد 1395
  • 08:28

سلام من فکر می کنم این تابع برای زمارین جواب میده توی محیط اندروید استادیو خطا میده مثلا var رو نمیشناسه 

کاربر سایت

نرجس اسماعیلی

عضویت از 1393/01/20

  • شنبه 16 مرداد 1395
  • 19:44
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)