2011-02-09 11 views
4
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-карте и в/папке/файле я хочу, чтобы фотография также была сохранена. После того, как принято я обновить экран с помощью этого ...Android - как сжать или уменьшить изображение?

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); 

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

ответ

1

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

+0

настройка макета и ширина помогли спасибо – Beginner

+1

Но таким образом у вас будет полная растровая карта, загруженная в память. Если вы сделаете это так, как я предложил, вы загрузите полный растровый рисунок, создайте уменьшенную версию, а позже загруженный полный растровый рисунок получает сбор мусора. – Shade

+0

@ Shade, пожалуйста, расскажите, как «создать уменьшенную версию» –

17
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); 

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

0

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

Смежные вопросы