2016-02-09 2 views
1

Здесь я не сохраняю изображение, которое я захватил. Он отображается в представлении изображения, но я пытаюсь сохранить изображение, однако изображение не отображается в представлении изображения.Не удалось сохранить растровое изображение

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Environment; 
import android.provider.MediaStore; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.text.SimpleDateFormat; 
import java.util.Date; 


public class MainActivity extends Activity { 
private static final int CAMERA_REQUEST = 1; 
private static int RESULT_LOAD_IMG = 1; 
String imgDecodableString; 
ImageView iv; 
Bitmap bmp; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    iv = (ImageView) findViewById(R.id.imgView); 
    Button b = (Button) findViewById(R.id.buttonLoadPicture); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectImage(); 
     } 
    }); 
} 
public void selectImage() { 

    final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
    builder.setTitle("Add Photo!"); 
    builder.setItems(options, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (options[item].equals("Take Photo")) { 
       String path = Environment.getExternalStorageDirectory() + "/CameraImages/example.jpg"; 
       File file = new File(path); 
       Uri outputFileUri = Uri.fromFile(file); 
       Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       // intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

       startActivityForResult(intent, 1); 
      } else if (options[item].equals("Choose from Gallery")) { 
       Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(intent, 2); 
      } else if (options[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 
if (resultCode == RESULT_OK) { 
    if (requestCode == 1) { 
     if (data != null && data.getExtras() != null) { 
      bmp = (Bitmap) data.getExtras().get("data"); 
      Log.w("path of image from gallery......******************.........", bmp + ""); 
      iv.setImageBitmap(bmp); 
     } 
}else { 
     if (requestCode == 2) { 

      Uri selectedImage = data.getData(); 
      String[] filePath = {MediaStore.Images.Media.DATA}; 
      Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null); 
      c.moveToFirst(); 
      int columnIndex = c.getColumnIndex(filePath[0]); 
      String picturePath = c.getString(columnIndex); 
      c.close(); 
      bmp = (BitmapFactory.decodeFile(picturePath)); 
      Log.w("path of image from gallery......******************.........", picturePath + ""); 
      iv.setImageBitmap(bmp); 
     } 
    } 
}}} 

При добавлении intent.putExtra (MediaStore.EXTRA_OUTPUT, outputFileUri ); образ сохраняется, но не отображается в виде

+0

Проверьте это, это поможет вам. Рабочий код в моем приложении: http: //stackoverflow.com/questions/34923702/android-getting-pictures-from-photos-galery-error-on-some-devices/34942980#349429 80 –

+0

Привет suhas, ссылка ur для получения изображения из галереи, на самом деле это работает для меня, что я хочу, мне нужно сохранить изображение, даже когда его отображать в соответствующем поле изображения –

+0

yes Я отправляю ответ для сохранения изображения. –

ответ

1

Вот код, который я использовал для захвата и сохранения затем изображения камеры отобразить его ImageView. Вы можете использовать в соответствии с вашими потребностями.

Вы должны сохранить изображение камеры в определенном месте, а затем извлечь из этого места, а затем преобразовать его в байтовый массив.

Здесь показан способ открытия захвата активности изображения камеры.

private static final int CAMERA_PHOTO = 111; 

private Uri imageToUploadUri; 


private void captureCameraImage() { 

     Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     File f = new File(Environment.getExternalStorageDirectory(), 
"POST_IMAGE.jpg"); 

     chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 

     imageToUploadUri = Uri.fromFile(f); 

     startActivityForResult(chooserIntent, CAMERA_PHOTO); 

    } 

, то ваш метод onActivityResult() должен быть таким.

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

      if (requestCode == CAMERA_PHOTO && resultCode == Activity.RESULT_OK) { 
       if(imageToUploadUri != null){ 
        Uri selectedImage = imageToUploadUri; 
        getContentResolver().notifyChange(selectedImage, null); 
        Bitmap reducedSizeBitmap = getBitmap(imageToUploadUri.getPath()); 
        if(reducedSizeBitmap != null){ 
         ImgPhoto.setImageBitmap(reducedSizeBitmap); 
         Button uploadImageButton = (Button) findViewById(R.id.uploadUserImageButton); 
          uploadImageButton.setVisibility(View.VISIBLE);     
        }else{ 
         Toast.makeText(this,"Error while capturing Image",Toast.LENGTH_LONG).show(); 
        } 
       }else{ 
        Toast.makeText(this,"Error while capturing Image",Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 

Это метод getBitmap(), используемый в onActivityResult(). Я сделал все улучшения производительности, которые могут быть возможны при получении растрового изображения изображения с камеры.

private Bitmap getBitmap(String path) { 

     Uri uri = Uri.fromFile(new File(path)); 
     InputStream in = null; 
     try { 
      final int IMAGE_MAX_SIZE = 1200000; // 1.2MP 
      in = getContentResolver().openInputStream(uri); 

      // Decode image size 
      BitmapFactory.Options o = new BitmapFactory.Options(); 
      o.inJustDecodeBounds = true; 
      BitmapFactory.decodeStream(in, null, o); 
      in.close(); 


      int scale = 1; 
      while ((o.outWidth * o.outHeight) * (1/Math.pow(scale, 2)) > 
        IMAGE_MAX_SIZE) { 
       scale++; 
      } 
      Log.d("", "scale = " + scale + ", orig-width: " + o.outWidth + ", orig-height: " + o.outHeight); 

      Bitmap b = null; 
      in = getContentResolver().openInputStream(uri); 
      if (scale > 1) { 
       scale--; 
       // scale to max possible inSampleSize that still yields an image 
       // larger than target 
       o = new BitmapFactory.Options(); 
       o.inSampleSize = scale; 
       b = BitmapFactory.decodeStream(in, null, o); 

       // resize to desired dimensions 
       int height = b.getHeight(); 
       int width = b.getWidth(); 
       Log.d("", "1th scale operation dimenions - width: " + width + ", height: " + height); 

       double y = Math.sqrt(IMAGE_MAX_SIZE 
         /(((double) width)/height)); 
       double x = (y/height) * width; 

       Bitmap scaledBitmap = Bitmap.createScaledBitmap(b, (int) x, 
         (int) y, true); 
       b.recycle(); 
       b = scaledBitmap; 

       System.gc(); 
      } else { 
       b = BitmapFactory.decodeStream(in); 
      } 
      in.close(); 

      Log.d("", "bitmap size - width: " + b.getWidth() + ", height: " + 
        b.getHeight()); 
      return b; 
     } catch (IOException e) { 
      Log.e("", e.getMessage(), e); 
      return null; 
     } 
    } 

Кроме того, вы убедитесь, что вы добавили все разрешения в вашем файле манифеста

Надеюсь, что это помогает вам

+0

Дай мне знать ваш результат – saeed

+0

Привет, ура код очень полезен, но мне нужна небольшая помощь, что он сохраняет только один раз в следующий раз, когда я делаю снимок, накладывая предыдущее изображение вы можете рассказать мне, как перечислить его отдельно –

+0

его простой вы можете добавить timstamp, чтобы сохранить изображение – saeed

0

изображения Попробуйте:

FileOutputStream out = null; 
     String filename = getFilename(); 
     try { 
      out = new FileOutputStream(filename); 
      scaledBitmap.compress(Bitmap.CompressFormat.JPEG, 80, out); 

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




public static String getFilename() { 
     File file = new File(dirPath,image_path+"/Images"); 
     if (!file.exists()) { 
      file.mkdirs(); 
     } 
     String uriSting = (file.getAbsolutePath() + "/"+ System.currentTimeMillis() + ".jpg"); 
     return uriSting; 

    } 
0

изменить код onActivityResult и объявить outputFileUri как глобальные ...

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 
     if (requestCode == 1) { 

      BitmapFactory.Options options=new BitmapFactory.Options(); 
      options.inSampleSize=8; 
      final Bitmap bitmap=BitmapFactory.decodeFile(outputFileUri.getPath(),options); 
      Bitmap photo = bitmap; 

       //Log.w("path of image from gallery......******************.........", bmp + ""); 
       iv.setImageBitmap(photo); 

     }else { 
      if (requestCode == 2) { 

       Uri selectedImage = data.getData(); 
       String[] filePath = {MediaStore.Images.Media.DATA}; 
       Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null); 
       c.moveToFirst(); 
       int columnIndex = c.getColumnIndex(filePath[0]); 
       String picturePath = c.getString(columnIndex); 
       c.close(); 
       bmp = (BitmapFactory.decodeFile(picturePath)); 
       // Log.w("path of image from gallery......******************.........", picturePath + ""); 
       iv.setImageBitmap(bmp); 
      } 
     } 
    }} 
Смежные вопросы