2015-05-20 10 views
5

Buduję API dla Androida, gdzie programiści mogą używać mojej klasy do zrobienia zdjęcia. Ale, jak mogę zwrócić bitmapę za pomocą onPictureTaken. Spójrz mój kod, należy:Jak zwrócić bitmapę za pomocą onPictureTaken na Androida?

Jest to przycisk na główną działalność:

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

A oto moja klasa 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; 
     // 
} 
} 

Co muszę zrobić, aby otrzymać jedną bitmapę używając moją klasę ' metoda?

Dzięki.

Odpowiedz

0

Nie musisz. Zamiast tego zaktualizuj interfejs użytkownika w dowolny sposób w usłudze onPictureTaken. Nic nie zwracasz z tego.

+0

Dziękuję za pomoc. Nie chcę używać Bitmapy w interfejsie użytkownika. Chcę przetworzyć tę bitmapę na inne metody. Na przykład: Bitmap bitmap = CameraUtils.takePicture(); CameraUtils.rotateBitmap (bitmap, dregrees); Czy jest to sposób na zrobienie tego? – Caaarlos

+0

Tak-zrób to wszystko na onPictureTaken –

+0

Ale mam wiele metod do manipulowania bitmapą. Naprawdę potrzebuję czegoś, aby uzyskać bitmapę i przetwarzać obraz tak, jak chcę. Czy jest jakaś logika, inna, żeby zrobić to wszystko na obrazie? – Caaarlos

Powiązane problemy