Android - как сжать или уменьшить изображение? - PullRequest
4 голосов
/ 09 февраля 2011
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);

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

Ответы [ 3 ]

17 голосов
/ 09 февраля 2011
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

РЕДАКТИРОВАТЬ: Теперь мне пришло в голову, что вы можете сделать это быстрее и эффективнее, используя 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);

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

1 голос
/ 09 февраля 2011

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

0 голосов
/ 26 ноября 2016

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...