2013-07-24 5 views
1

Je suis complètement nouvelles sur Android et malheureusement avec peu de temps pour l'apprendre par la bonne façon, j'ai un travail à libérer. Le problème est: je dois prendre une photo et la traiter avec un algorithme que j'ai fait. Je l'ai fait par la meilleure façon que je pouvais trouver, je sais qu'il ressemble vraiment trahsie pour ceux qui en ont vraiment obtenir android (désolé)Comment traiter une photo prise par une intention?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    takePic(); 

protected void takePic(){ 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(takePictureIntent, 100); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Bundle extras = data.getExtras(); 
    mImageBitmap = (Bitmap) extras.get("data"); 
      Algorithm(mImageBitmap) 

Mais il ne traite pas, il prend une photo, demandez à sauvegarder ou annuler et quitte l'application, je l'ai déjà fait de différentes manières (création d'une nouvelle activité), mais rien ne semble fonctionner

+0

Que fait votre méthode Algorithme (..)? Je vais supposer que se bloque – dymmeh

+0

cela pourrait aider - http://stackoverflow.com/questions/15248265/camera-intent-not-working-with-samsung-galaxy-s3/15287164#15287164 – Carbon

Répondre

0

Voici comment je l'ai fait

pour aller à la caméra:

Quelque part, declaire une variable fileUri et maintenez sur elle

Uri fileUri; 
final int TAKE_PICTURE=100;//this can be any int, really 
public void goToCamera(){ 
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
    File photo; 
    try 
    { 
     // place where to store camera taken picture 
     photo = this.createTemporaryFile("picture", ".jpg"); 
     Log.v(TAG, "Here(after createTempFile)"); 
     photo.delete(); 
    } 
    catch(Exception e) 
    { 
     Log.v(TAG, "Can't create file to take picture!" + e.getMessage()); 
     Toast.makeText(context, "Please check SD card!", Toast.LENGTH_SHORT).show(); 
     return; 
    } 
    fileUri = Uri.fromFile(photo); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    //Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, TAKE_PICTURE); 
} 

ensuite pour récupérer l'image

protected void onActivityResult(int requestCode, int resultCode, Intent data){ 

    if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK){ 
     this.getContentResolver().notifyChange(uri, null); 
     ContentResolver cr = this.getContentResolver(); 
     Bitmap bitmap; 
     try 
     { 
      BitmapFactory.Options ops = new BitmapFactory.Options(); 
      ops.inSampleSize = 4; 
      bitmap = BitmapFactory.decodeFile(uri.getPath().toString(), ops); 
     } 
     catch (Exception e) 
     { 
      Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show(); 
      Log.d(TAG, "Failed to load", e); 
     } 
    } 
} 

La création d'un fichier temporaire mentionné ci-dessus:

private File createTemporaryFile(String part, String ext) throws Exception 
{ 
    File tempDir= Environment.getExternalStorageDirectory(); 
    tempDir=new File(tempDir.getAbsolutePath()+"/.temp/"); 
    Log.i(TAG, tempDir.toString()); 
    if(!tempDir.exists()) 
    { 
     Log.i(TAG, "Dir doesnt exist"); 
     tempDir.mkdirs(); 
    } 
    return File.createTempFile(part, ext, tempDir); 
} 

Je sais que cela est probablement pas aussi simple que vous espériez, mais cette approche semblait être aussi flexible et compatible que possible. Faites-moi savoir si j'ai laissé quelque chose d'autre

Questions connexes