2012-05-22 4 views
0

이것은 Android에서 사진을 찍는 코드입니다. 하지만 항상 빈 이미지를 반환합니다. 무엇이 오류일까요? 코드에서 설정 한 플래시, 노출 및 포커스 모드를 설정하는 데 몇 가지 문제가 있음을 알았지 만 사진이 찍히더라도 카메라는 빈 이미지를 반환합니다. (최소한 나는 조리개의 소리를 들었습니다.)Android : 빈 사진을주는 카메라

C 

amera.Parameters p = camera.getParameters(); 
      List<Size> sizes = p.getSupportedPictureSizes(); 
      // Choose any one you want among sizes 
      Size size = sizes.get(0); 
      p.setPictureSize(size.width, size.height); 

      p.set("flash-mode","off"); 
      p.set("focus-mode","auto"); 
      p.setExposureCompensation(100); 
      p.setFocusMode("auto"); 
      camera.setParameters(p); 
      camera.startPreview(); 
      camera.takePicture(shutterCallback, rawCallback, 
        jpegCallback); 

ShutterCallback shutterCallback = new ShutterCallback() { 
     public void onShutter() { 
      Log.d(TAG, "onShutter'd"); 
     } 
    }; 

    /** Handles data for raw picture */ 
    PictureCallback rawCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      Log.d(TAG, "onPictureTaken - raw"); 
     } 
    }; 

    /** Handles data for jpeg picture */ 
    PictureCallback jpegCallback = new PictureCallback() { 
     public void onPictureTaken(byte[] data, Camera camera) { 
      FileOutputStream outStream = null; 
      try { 
       // write to local sandbox file system 
       // outStream = 
       // CameraDemo.this.openFileOutput(String.format("%d.jpg", 
       // System.currentTimeMillis()), 0); 
       // Or write to sdcard 
       outStream = new FileOutputStream(String.format(
         "/sdcard/%d.jpg", System.currentTimeMillis())); 
       outStream.write(data); 
       outStream.close(); 
       Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
      } 
      Log.d(TAG, "onPictureTaken - jpeg"); 
     } 
    }; 
    @Override 
    public void draw(Canvas canvas) { 
     super.draw(canvas); 
     Paint p = new Paint(Color.RED); 
     Log.d(TAG, "draw"); 
     canvas.drawText("PREVIEW", canvas.getWidth()/2, 
       canvas.getHeight()/2, p); 
    } 
+0

뿐만 아니라 콜백 메소드 코드를 게시하시기 바랍니다. – Rajesh

+0

나는 내가 사용하고있는 모든 콜백을위한 메소드를 게시했다. – Hick

답변

1

Camera.java는

public class Camera extends Activity 
    { 
private static final int CAMERA_REQUEST = 1888; 
private String selectedImagePath; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    Intent cameraIntent = new Intent(ACTION_IMAGE_CAPTURE); 
    startActivityForResult(cameraIntent, CAMERA_REQUEST); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode == RESULT_OK) { 
     if (requestCode == CAMERA_REQUEST) 
     { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      photo.compress(Bitmap.CompressFormat.JPEG, 40, bytes); 
      Random randomGenerator = new Random();randomGenerator.nextInt(); 
      String newimagename=randomGenerator.toString()+".jpg"; 
      File f = new File(Environment.getExternalStorageDirectory() 
            + File.separator + newimagename); 
      try { 
       f.createNewFile(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //write the bytes in file 

      try { 
       fo = new FileOutputStream(f.getAbsoluteFile()); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 
       fo.write(bytes.toByteArray()); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
       uri=f.getAbsolutePath(); 
    //this is the url that where you are saved the image 
     } 



    } 
+0

나는 그것을하는 그 방법을 안다. 답변 주셔서 감사하지만 이것은 매우 다른 방법입니다. – Hick