Как сохранить изображение из ImageView после съемки
Я выбираю фотографию из галереи или беру ее с помощью камеры. Если я добавлю изображение в свой imageView и нажму кнопку подтверждения, как я могу сохранить это изображение? Должен ли я использовать saveState()? Пожалуйста, оставьте несколько комментариев. Благодарю.
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) return;
switch (requestCode)
{
case PICK_FROM_CAMERA:
Bitmap selectedImage = (Bitmap) data.getExtras().get("data");
selectedImage = Bitmap.createScaledBitmap(selectedImage, 80, 80, false);
mImageView.setImageBitmap(selectedImage);
break;
case PICK_FROM_GALLERY:
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image Path : " + selectedImagePath);
mImageView.setImageURI(selectedImageUri);
break;
}
}
private void saveState()
{
String name = (String) nameEdit.getText().toString();
String category = (String) categoryEdit.getText().toString();
String expired_date = (String) expired_Date_Btn.getText().toString();
ImageView image = (ImageView) mImageView.setImageURI(); //how to edit?
if(mRowId == null)
{
long id = mDbHelper.insertItem(category, name, expired_date);
if(id>0)
{
mRowId = id;
}
}
else
{
mDbHelper.updateItem(mRowId, category, name, expired_date);
}
}
//How can I save image after clicking button?
confirmButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v){
setResult(RESULT_OK);
finish();
}
});
2 ответа
Вы можете сохранить изображение всего просмотра (не только ImageView), выполнив следующие действия:
1. Получите растровое изображение вашего вида:
public Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.draw(c);
v.invalidate();
return b;
}
2. Сохраните файл на SD-карте (или куда хотите):
protected String saveBitmap(Bitmap bm, String name) throws Exception {
String tempFilePath = Environment.getExternalStorageDirectory() + "/"
+ getPackageName() + "/" + name + ".jpg";
File tempFile = new File(tempFilePath);
if (!tempFile.exists()) {
if (!tempFile.getParentFile().exists()) {
tempFile.getParentFile().mkdirs();
}
}
tempFile.delete();
tempFile.createNewFile();
int quality = 100;
FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
bm.compress(CompressFormat.JPEG, quality, bos);
bos.flush();
bos.close();
bm.recycle();
return tempFilePath;
}
Этот код взят из одного из моих проектов, но я думаю, что их легко понять и использовать повторно. Надеюсь, это поможет вам.
Я не уверен, как это сделать из галереи или почему вы этого хотите, поскольку изображение уже сохранено в телефоне, если оно находится в галерее. Вы должны быть в состоянии переписать файл, используя его URI. Если вы делаете снимок с помощью камеры, вы можете увидеть, что у вас есть растровое изображение. Сохранить его относительно легко, используя следующий фрагмент кода:
outStream = new FileOutputStream(file);
bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
Вам понадобится разрешение
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Для получения дополнительной информации попробуйте следовать этому примеру (именно там я нашел фрагменты кода). Они загружают свое изображение, но должны применяться те же понятия. http://android-er.blogspot.com/2010/07/save-file-to-sd-card.html
Надеюсь это поможет!