изменение размера изображений в галерее для приложения обработки изображений.андроид - PullRequest
0 голосов
/ 27 октября 2011

У меня есть приложение для обработки изображений.Если я делаю снимок, используя часть приложения, которая захватывает изображение, изображение в конечном итоге отображается на экране.Это потому, что я указал параметры камеры, используя размер экрана оборудования.если я пытаюсь загрузить изображение, снятое с камеры телефона (а не камеры приложения), то изображение будет слишком большим на экране, а иногда слишком большим с точки зрения байтов.Как я могу изменить размер или сжать изображения в галерее, чтобы мое приложение могло их использовать?спасибо

public class DisplayUndistortedBitmapFromGalleryActivity extends Activity {

    private static final String TAG = "*********DUBFGActivity";
    private Context mContext = this;
    Uri uri;
    private Bitmap mbitmap = null;

    @Override 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);


         uri = getIntent().getData();
        if(uri != null){
            Log.e(TAG, "uri ok");
        }else {
            Log.e(TAG, "uri not ok");
        }


        try {
              mbitmap = Media.getBitmap(getContentResolver(), uri);
             //setMbitmap(bitmap);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        if(mbitmap == null){
            Log.e(TAG,"mbitmap is null");
        }else{
            Log.e(TAG,"mbitmap is not null");
        }

.

public class DisplayUndistortedBitmapFromGallery extends View{





    public DisplayUndistortedBitmapFromGallery(Context context) {
        super(context);

    }





    public DisplayUndistortedBitmapFromGallery(Context context, AttributeSet attr) {
        super(context,attr);
        Log.e(TAG, "++++++++++ inside dubfgview constructor");





       Bitmap bm = ((DisplayUndistortedBitmapFromGalleryActivity)getContext()).getMbitmap();

        if(bm == null){
            Log.e(TAG, "bm = null");
        }else{
            Log.e(TAG, "bm =  not null");
        }


        bgr = bm.copy(bm.getConfig(), true);

1 Ответ

1 голос
/ 27 октября 2011

Если я правильно понимаю ваш вопрос, есть две проблемы. Во-первых, ImageView не масштабирует изображение до размеров экрана, а во-вторых, растровые изображения требуют слишком много ОЗУ.

Чтобы решить первую проблему, просто скажите изображению, как вы хотите масштабировать изображение. Просто сделайте следующее:

imgView.setScaleType(ImageView.ScaleType.INSERT_SCALE_TYPE);

Вот список различных типов шкал.

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

Вторая проблема действительно легко решается. Вам просто нужно указать BitmapFactory уменьшить изображение при загрузке. Вот пример:

int inSample = 4; // specifies how many 1/N samples to keep, in this case 1/4 off all samples are kept 

opts = new BitmapFactory.Options();
opts.inSampleSize = inSample;

Bitmap b = BitmapFactory.decodeResource(c.getResources(), imgResId, opts);

Более подробное объяснение см. В моем ответе на этот вопрос: Android GalleryView Recycling

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