Как обработать фотографию, сделанную по намерению?

Я полностью новость об андроиде и, к сожалению, у меня мало времени, чтобы научиться правильно, у меня есть работа, которую я хочу выпустить. Проблема в том, что мне нужно сфотографировать и обработать ее с помощью алгоритма, который я сделал. Я сделал это самым простым способом, который смог найти, я знаю, что это выглядит как настоящая трахсия для тех, кто действительно получает Android (извините)

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)

Но он не обрабатывает, он берет фотографию, просит сохранить или отменить и оставляет приложение, я уже сделал по-разному (создание нового действия), но ничего не похоже на работу

1 ответ

Вот как я это сделал

Чтобы перейти к камере:

Где-нибудь, объявите переменную fileUri и держите ее

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);
}

Затем, чтобы получить изображение

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);
       }
    }
}

Упомянутый выше временный файл создания:

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);
}

Я понимаю, что это, вероятно, не так просто, как вы надеялись, но этот подход казался настолько гибким и совместимым, насколько это возможно. Дайте мне знать, если я пропущу что-нибудь еще

Другие вопросы по тегам