【问题标题】:resize image picked from gallery调整从图库中选择的图像大小
【发布时间】:2015-09-26 17:55:52
【问题描述】:

我正在开发一个应用程序,该应用程序从图库中获取图像并将其保存到解析中。

问题是当我选择相机拍摄的图像时,图像的尺寸太大,需要几秒钟才能将图像加载到图像视图中。此外,当我保存图像并在应用程序中再次下载时,它需要很长时间,因为它必须下载一个大图像。

我不知道如何减小所选图像的大小。我尝试了几件事,但一切正常。

这是我此刻的代码

public class Datos extends Activity implements OnItemSelectedListener {


private final int SELECT_PHOTO = 1;
private ImageButton imageView;


ParseFile file;
byte [] data;

/*
    public Bitmap getResizedBitmap(Bitmap bm, int newWidth, int newHeight) {
    int width = bm.getWidth();
    int height = bm.getHeight();
    float scaleWidth = ((float) newWidth) / width;
    float scaleHeight = ((float) newHeight) / height;
    // CREATE A MATRIX FOR THE MANIPULATION
    Matrix matrix = new Matrix();
    // RESIZE THE BIT MAP
    matrix.postScale(scaleWidth, scaleHeight);

    // "RECREATE" THE NEW BITMAP
    Bitmap resizedBitmap = Bitmap.createBitmap(
            bm, 0, 0, width, height, matrix, false);
    bm.recycle();
    return resizedBitmap;
    }
*/


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_datos);
    btnClick();

    imageView = (ImageButton) findViewById(R.id.imageButton);


    ImageButton pickImage = (ImageButton) findViewById(R.id.imageButton);
    pickImage.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View view) {
            Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
            photoPickerIntent.setType("image/*");
            //photoPickerIntent.putExtra("outputX", 150);
            //photoPickerIntent.putExtra("outputY", 100);
            //photoPickerIntent.putExtra("aspectX", 1);
            //photoPickerIntent.putExtra("aspectY", 1);
            //photoPickerIntent.putExtra("scale", true);
            startActivityForResult(photoPickerIntent, SELECT_PHOTO);
        }
    });

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);


    switch (requestCode) {
        case SELECT_PHOTO:
            if (resultCode == RESULT_OK) {
                try {
                    Uri imageUri = imageReturnedIntent.getData();
                    InputStream imageStream = getContentResolver().openInputStream(imageUri);
                    Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);
                    imageView.setImageBitmap(selectedImage);

                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    selectedImage.compress(Bitmap.CompressFormat.PNG, 100, stream);

                    data = stream.toByteArray();

                    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), selectedImage);
                    imageView.setBackgroundDrawable(bitmapDrawable);

                    BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
                    Bitmap bmp = drawable.getBitmap();
                    Bitmap b = Bitmap.createScaledBitmap(bmp, 120, 120, false);


                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }


            }

    }
}



@Override
public void onItemSelected(AdapterView<?> parent, View v, int position,
                           long id) {
    // TODO Auto-generated method stub

    Spinner spinner = (Spinner) parent;
    if (spinner.getId() == R.id.telefono) {
        consola = parent.getItemAtPosition(position).toString();
    } else if (spinner.getId() == R.id.provincia) {
        provincia = parent.getItemAtPosition(position).toString();
    }

}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
}


public void btnClick() {

    Button buttonEnviar = (Button) findViewById(R.id.enviar);


    buttonEnviar.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View arg0) {

            //Storing image in parse passed in  onclick method of a button with the below code:


            Intent intentDatos = new Intent(Datos.this, Inicio.class);
            startActivity(intentDatos);


            ParseObject testObject = new ParseObject("Musica");

            if (data != null) {

                file = new ParseFile("selected.png", data);
            }

            else {

                data = "".getBytes();
                file = new ParseFile("selected.png", data);
            }

            //file.saveInBackground();


            testObject.put("imagen", file);

            testObject.saveInBackground();




        }
    });


}

有人知道怎么做吗?

感谢您的帮助,

【问题讨论】:

标签: android image resize


【解决方案1】:

This answer会帮你

如果您希望位图比例相同并减小位图大小。然后通过你的 最大尺寸位图。你可以使用这个功能

public Bitmap getResizedBitmap(Bitmap image, int maxSize) {
        int width = image.getWidth();
        int height = image.getHeight();

        float bitmapRatio = (float)width / (float) height;
        if (bitmapRatio > 1) {
            width = maxSize;
            height = (int) (width / bitmapRatio);
        } else {
            height = maxSize;
            width = (int) (height * bitmapRatio);
        }
        return Bitmap.createScaledBitmap(image, width, height, true);
}

像这样在SELECT_PHOTO 的情况下更改您的onActivityResult

   case SELECT_PHOTO:
        if (resultCode == RESULT_OK) {
            try {
                Uri imageUri = imageReturnedIntent.getData();
                InputStream imageStream = getContentResolver().openInputStream(imageUri);
                Bitmap selectedImage = BitmapFactory.decodeStream(imageStream);

                selectedImage = getResizedBitmap(selectedImage, 400);// 400 is for example, replace with desired size

                imageView.setImageBitmap(selectedImage);


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }

【讨论】:

  • 嗨 Rahul,感谢您的回答,但问题是我不完全知道在哪里使用这部分代码。我一直在尝试,但它不起作用。 "getResizeBitmap" 出现消息从未使用过。你能帮我解决这个问题,或者给我一个关于如何使用这个代码的例子吗?我一直在寻找。
  • 太棒了! BitmapFactory.decodeFile() 失败时完美运行
猜你喜欢
  • 2018-11-07
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2010-11-27
  • 1970-01-01
  • 2018-01-10
  • 2012-02-24
  • 2023-03-28
相关资源
最近更新 更多