2016-03-19 6 views
0

Ich arbeite an einer Android-Anwendung und ich muss ein Bild machen und speichern. Es funktioniert und mein Bild wird in einem Verzeichnis des Telefons gespeichert. Vor allem im Bildverzeichnis.Applikation für Android: Bild anzeigen

So, hier seine meine Klassenparameter mit der Taste der Kamera (neue Aktivität) zu starten und das Bild aufzunehmen:

public class Parametre extends Activity { 

    private EditText ETpseudo= null; 
    private Button buttonPhoto = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.parametres); 

     ETpseudo =(EditText) findViewById(R.id.editPseudo); 
     buttonPhoto = (Button) findViewById(R.id.buttonPhoto); 

     //ivPhoto.setImageBitmap(); 

     buttonPhoto.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(Parametre.this, CameraActivity.class)); 
      } 
     });  

    } 

} 

CameraActivity:

public class CameraActivity extends Activity { 

    private Camera mCamera; 
    private CameraPreview mCameraPreview; 
    private ImageView cadrePhoto = null; 


    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     Log.d("DEBUG", String.valueOf(grantResults[0])); 
     startCamera(); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.camera); 

     Button captureButton = (Button) findViewById(R.id.button_capture); 

     startCamera(); 

     captureButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mCamera.takePicture(null, null, mPicture); 
      } 
     }); 
    } 

    private void startCamera(){ 

     mCamera = getCameraInstance(); 
     mCamera.startPreview(); 
     mCameraPreview = new CameraPreview(this, mCamera); 
     FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
     preview.addView(mCameraPreview); 
     setCameraDisplayOrientation(this, 1, mCamera); 
    } 

    /** 
    * Helper method to access the camera returns null if it cannot get the 
    * camera or does not exist 
    * 
    * @return 
    */ 
    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    private Camera getCameraInstance() { 
     Camera camera = null; 
     try { 
      camera = Camera.open(1); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return camera; 
    } 


    @TargetApi(Build.VERSION_CODES.GINGERBREAD) 
    public void setCameraDisplayOrientation(Activity activity, int cameraId,android.hardware.Camera camera) { 

     android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); 
     android.hardware.Camera.getCameraInfo(cameraId, info); 
     int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
     int degrees = 0; 
     switch (rotation) { 
      case Surface.ROTATION_0: 
       degrees = 0; 
       break; 
      case Surface.ROTATION_90: 
       degrees = 90; 
       break; 
      case Surface.ROTATION_180: 
       degrees = 180; 
       break; 
      case Surface.ROTATION_270: 
       degrees = 270; 
       break; 
     } 
     int result; 
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
      result = (info.orientation + degrees) % 360; 
      result = (360 - result) % 360; // compensate the mirror 
     } else { // back-facing 
      result = (info.orientation - degrees + 360) % 360; 
     } 
     camera.setDisplayOrientation(result); 
    } 

    Camera.PictureCallback mPicture = new Camera.PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 
      File pictureFile = getOutputMediaFile(); 
      if (pictureFile == null) { 
       Log.d("Error", "Error creating media file, check storage permissions: "); 
       return; 
      } 
      try { 
       FileOutputStream fos = new FileOutputStream(pictureFile); 
       fos.write(data); 
       fos.close(); 


      } catch (FileNotFoundException e) { 
       Log.d("DBG", "File not found: " + e.getMessage()); 
      } catch (IOException e) { 
       Log.d("Error", "Error accessing file: " + e.getMessage()); 
      } 
     } 
    }; 

    private static File getOutputMediaFile() { 
     File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp"); 

     if (!mediaStorageDir.exists()) { 
      if (!mediaStorageDir.mkdirs()) { 
       Log.d("MyCameraApp", "failed to create directory"); 

       return null; 
      } 
     } 
     // Create a media file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     File mediaFile; 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); 

     return mediaFile; 

    } 
} 

So, nach der Einnahme Foto, möchte ich das Bild auf einem ImageView in der Parameteransicht anzeigen. Aber ich weiß nicht, wie ich das machen soll. Wie bekomme ich das Foto zurück und zeige ihn auf dem Parameter View?

Danke.

Sorry für mein Englisch:/

Antwort

1

Sie dies so einfach Art und Weise tun können, nur eine statische Bitmap erstellen, wenn Bild in picturecallback Methode genommen

   Bitmap bmap=BitmapFactory.decodeByteArray(data, 0, data.length,sizeOptions); 


      Log.e("clickedbitmaaapp", String.valueOf(bmap)); 

statische Bitmap mBitmap = bmap;

erstellen Sie diese Bitmap in anderen Klassen, wo Sie leicht darauf zugreifen können.

0

Danke Ihnen.

Ich kann meinen Code jetzt nicht testen. Aber denkst du, dass das hier funktionieren sollte? : (cameraActivity)

public class CameraActivity extends Activity { 

static Bitmap mBitmap; 

... 

Camera.PictureCallback mPicture = new Camera.PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
     File pictureFile = getOutputMediaFile(); 
     if (pictureFile == null) { 
      Log.d("Error", "Error creating media file, check storage permissions: "); 
      return; 
     } 
     try { 
      FileOutputStream fos = new FileOutputStream(pictureFile); 
      fos.write(data); 
      fos.close(); 

      BitmapFactory.Options options = new BitmapFactory.Options(); 

      Bitmap bmap= BitmapFactory.decodeByteArray(data, 0, data.length, options); 
      mBitmap = bmap; 

     } catch (FileNotFoundException e) { 
      Log.d("DBG", "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
      Log.d("Error", "Error accessing file: " + e.getMessage()); 
     } 
    } 
}; 

und dann in meiner Parameterklasse:

public class Parametre extends Activity { 

private EditText ETpseudo= null; 
private Button buttonPhoto = null; 
private ImageView iv = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.parametres); 

    ETpseudo =(EditText) findViewById(R.id.editPseudo); 
    buttonPhoto = (Button) findViewById(R.id.buttonPhoto); 

    //ivPhoto.setImageBitmap(); 

    buttonPhoto.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(Parametre.this, CameraActivity.class)); 
     } 
    }); 



     ImageView imageView=(ImageView)findViewById(R.id.cadreImage); 
     imageView.setImageBitmap(CameraActivity.mBitmap); 

    } 

}