Android – как сжать или уменьшить изображение?

ImageButton avatarButton = (ImageButton) findViewById(R.id.ImageButton_Avatar); avatarButton.setImageResource(R.drawable.avatar); strAvatarFilename = "Image.jpg"; final Uri imageUriToSaveCameraImageTo = Uri.fromFile(new File(Environment.getExternalStorageDirectory()+"/Folder/"+strAvatarFilename)); avatarButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent pictureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); pictureIntent.putExtra( MediaStore.EXTRA_OUTPUT, imageUriToSaveCameraImageTo ); startActivityForResult(Intent.createChooser(pictureIntent, strAvatarPrompt), TAKE_AVATAR_CAMERA_REQUEST); Editor editor = Preferences.edit(); editor.putString(PREFERENCES_AVATAR, imageUriToSaveCameraImageTo.getPath()); editor.commit(); } }); 

У меня есть этот код. Он берет фотографию, а затем сохраняет ее в двух местах, по умолчанию на SD-карте и в / папке / файле я хочу, чтобы фотография также была сохранена. После этого я обновляю экран, используя этот …

 ImageButton avatarButton = (ImageButton) findViewById(R.id.ImageButton_Avatar); String strAvatarUri = Preferences.getString(PREFERENCES_AVATAR, ""); Uri imageUri = Uri.parse(strAvatarUri); avatarButton.setImageURI(null); avatarButton.setImageURI(imageUri); 

Это обновляет кнопку изображения, чтобы пользователь мог видеть изображение, которое они сделали. Однако это выглядит очень большим и заполняет экран. Есть ли способ сжать или уменьшить изображение, чтобы пользователь мог видеть его с разумным размером? благодаря

Вы можете испортить свойства scaleType ImageButton (например, fitXY или cropCenter), и установив фиксированный размер в LayoutPreferences (высота и ширина), вы все будете настроены.

 Bitmap thumb = Bitmap.createScaledBitmap (BitmapFactory.decodeFile(photoPath), 96, 96, false); 

Где второй и третий параметры для createScaledBitmap – это ширина и высота соответственно.

http://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap%28android.graphics.Bitmap,%20int,%20int,%20boolean%29

EDIT: теперь мне пришло в голову, что вы можете сделать это быстрее и эффективнее, используя B itmapFactory.Options и параметр inSampleSize :

 BitmapFactory.Options opts = new BitmapFactory.Options (); opts.inSampleSize = 2; // for 1/2 the image to be loaded Bitmap thumb = Bitmap.createScaledBitmap (BitmapFactory.decodeFile(photoPath, opts), 96, 96, false); 

Таким образом вы сэкономите еще больше памяти, а сокращение должно занимать меньше времени.

Библиотека Android SiliCompressor предоставляет эту функцию для сжатия ваших изображений, сохраняя при этом качество изображения.