2015-05-20 4 views
5

Я создаю API для Android, где разработчики могут использовать мой класс, чтобы сделать снимок. Но как я могу вернуть Bitmap, используя onPictureTaken. Смотрите мой код, пожалуйста:Как вернуть растровое изображение с помощью onPictureTaken на Android?

Это кнопка на mainActivity:

button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // onPictureTaken does not return nothing 
      // so, how can I get a bitmap from takePicture? 
      Bitmap mBitmap = CameraUtils.takePicture(); 
     } 
    }); 

А вот мой класс CameraUtils:

public class CameraUtils implements Camera.PictureCallback { 

private Camera mCamera = null; 
private SurfaceTexture surfaceTexture = new SurfaceTexture(0); 

public Bitmap takePicture() { 

    try { 
     mCamera = Camera.open(1); 

     Camera.Parameters params = mCamera.getParameters(); 
     List<Camera.Size> sizes = params.getSupportedPictureSizes(); 
     params.setPictureFormat(ImageFormat.JPEG); 
     params.setPictureSize(sizes.get(0).width, sizes.get(0).height); 
     mCamera.setParameters(params); 

     mCamera.setPreviewTexture(surfaceTexture); 
     mCamera.startPreview(); 

     Log.i("MyCamera", "before takePicture"); 

     new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
       mCamera.takePicture(null, null, CameraUtils.this); 
       } 
      }, 1000); 


     //how to return a bitmap from here?? 
     //how to wait for onPictureTaken?? 
     return ????? 

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

@Override 
public void onPictureTaken(byte[] data, Camera camera) { 
     Bitmap mBitmap = BitmapFactory 
       .decodeByteArray(data, 0, data.length); 

     // 
     // how to return something here?? 
     // 
     // 
     // What logic I have to do? 
     // 

     // 
     // 
     // return mBitmap; 
     // 
} 
} 

Что я должен сделать, чтобы получить один Bitmap, используя мой класс метод?

Спасибо.

ответ

0

У вас нет. Вместо этого вы обновляете пользовательский интерфейс любым способом, который вы хотите использовать в onPictureTaken. Вы ничего не возвращаете.

+0

Спасибо, что помогли мне. Я не хочу использовать Bitmap в пользовательском интерфейсе. Я хочу обработать это растровое изображение по другим методам. Например: Bitmap bitmap = CameraUtils.takePicture(); CameraUtils.rotateBitmap (bitmap, dregrees); Есть ли способ сделать это? – Caaarlos

+0

Да-все это в onPictureTaken –

+0

Но у меня есть много способов манипулировать растровым изображением. Мне действительно нужно что-то, чтобы получить растровое изображение и обработать изображение так, как я хочу. Есть ли какая-то логика, другая, чтобы сделать все это наPictureTaken? – Caaarlos

Смежные вопросы