2014-02-11 5 views
3

Я пытался установить изображение для изображения imageview вид из внешнего хранилища, и я сделал с этим, но дело в том, что оно устанавливает все изображение в imageview, и я хочу только установить выбранную квадратную область от этого изображения. Просто жизнь facebook предоставила функциональность, чтобы настроить профиль pic .. Может ли кто-нибудь помочь мне это сделать? Ниже приводится пример того, что я хочу сделать ..Как установить выбранную область изображения в ImageView

enter image description here

+0

вы имеете в виду вы хотите обрезать изображение? –

+0

используйте это с целью вашей камеры - photoPickerIntent.putExtra («crop», «true»); –

+1

Я не хочу изменять исходное изображение, я просто хочу установить выделенную область в imageview – Akshay

ответ

2

Что-то вроде этого:

public static Bitmap cropBitmapToSquare(Bitmap bmp) { 

    System.gc(); 
    Bitmap result = null; 
    int height = bmp.getHeight(); 
    int width = bmp.getWidth(); 
    if (height <= width) { 
     result = Bitmap.createBitmap(bmp, (width - height)/2, 0, height, 
       height); 
    } else { 
     result = Bitmap.createBitmap(bmp, 0, (height - width)/2, width, 
       width); 
    } 
    return result; 
} 

Вот пример с растениеводстве деятельности:

http://khurramitdeveloper.blogspot.ru/2013/07/capture-or-select-from-gallery-and-crop.html

+0

Спасибо за ссылку ,, Надеюсь, это сработает для меня .. – Akshay

+0

Большое спасибо за ссылку, это сработало для меня .. – Akshay

0

на самом деле мой комментарий выше о setImageMatrix не был лучшим решением, попробуйте этот пользовательский Drawable (нет необходимости allo Cate любые временные Bitmaps): Код

class CropDrawable extends BitmapDrawable { 

    private Rect mSrc; 
    private RectF mDst; 

    public CropDrawable(Bitmap b, int left, int top, int right, int bottom) { 
     super(b); 
     mSrc = new Rect(left, top, right, bottom); 
     mDst = new RectF(0, 0, right - left, bottom - top); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     canvas.drawBitmap(getBitmap(), mSrc, mDst, null); 
    } 

    @Override 
    public int getIntrinsicWidth() { 
     return mSrc.width(); 
    } 

    @Override 
    public int getIntrinsicHeight() { 
     return mSrc.height(); 
    } 
} 

и тестирование:

ImageView iv = new ImageView(this); 
    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.test); 
    Drawable d = new CropDrawable(b, 150, 100, 180, 130); 
    iv.setImageDrawable(d); 
    setContentView(iv); 
Смежные вопросы