gpt4 book ai didi

android - 调整从图库中选取的图像大小

转载 作者:太空狗 更新时间:2023-10-29 15:33:20 25 4
gpt4 key购买 nike

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

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

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

这是我现在的代码

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




}
});


}

有人知道怎么做吗?

谢谢你的帮助,

最佳答案

This answer会帮助你

if you want bitmap ratio same and reduce bitmap size. then pass your maximum size bitmap. you can use this function

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

关于android - 调整从图库中选取的图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com