У меня есть эта небольшая проблема. Я хочу сделать снимок с моей камерой. После этого я хотел бы сохранить его на 640 x 640 пикселей. Таким образом, я уменьшаю размер изображения от 5 МБ до 300 - 500 КБ или меньше, но когда я снимаю изображение с камеры, он сохраняет мое внешнее хранилище, но никогда не преобразует его в 640 х 640. Я получаю исходный размер изображения то есть около 4k разрешения.Изменение размера растрового изображения не работает
Целью является сохранение внутри растрового изображения изображения 640 x 640, но не оригинального размера.
Это код
public class MainActivity extends AppCompatActivity {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
private static final int CAMERA_REQUEST_CODE = 1;
Button mBtnCamera;
private Uri imageUri = null;
int aleatorio;
String foto;
ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.imageView);
aleatorio = Double.valueOf(Math.random() * 100).intValue();
foto = Environment.getExternalStorageDirectory() + "/imagen" + aleatorio + ".jpg";
mBtnCamera = (Button) findViewById(R.id.btnCamera);
mBtnCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cameraIntent();
}
});
}
private void cameraIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageUri = Uri.fromFile(new File(foto));
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) {
Bitmap image = BitmapFactory.decodeFile(foto);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(
image, 640, 640, false);
File f = new File(foto);
long size = f.length();
Toast.makeText(this, size/(1024 * 1024) + " MB, " + f.getAbsolutePath(), Toast.LENGTH_LONG).show();
mImageView.setImageBitmap(resizedBitmap);
}
}
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;
}
благодаря
вы никогда не экономите малоформатные растровый – tyczj