2012-04-24 17 views
5

Trên tất cả các thiết bị cầm tay tôi đã thử, bao gồm Galaxy Nexus với cả API 2.3.7 và 4.0 sau phương thức takePicture được gọi là thay đổi bề mặt đối với hình ảnh đã chụp, "Đánh giá hình ảnh".Xem lại hình ảnh không được hiển thị sau khi camera.takePicture

tôi đã thử nghiệm trên các thiết bị máy tính bảng và việc xem xét hình ảnh không hiển thị lên: XOOM API 3.1 Galaxy Tab 10.1 API 3.1 Galaxy Tab 10.1 API 3,2

surfaceView = (SurfaceView)findViewById(R.id.surfaceView); 

surfaceHolder = surfaceView.getHolder(); 
surfaceHolder.addCallback(this); 
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

... 

    public void takePicture() { 
     cam.takePicture(this, null, this); //Shuttercallback, RawCallback, JpegCallback 
    } 

... 

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  
    // Stop preview before changing camera parameters 
    if(isPreviewRunning) { 
     this.cam.stopPreview(); 
    } 

    Camera.Parameters p = this.cam.getParameters(); 
    LogUtils.info("CheckCapture", "Preview Size: " + String.valueOf(width) +"x" + String.valueOf(height)); 
    p.setPreviewSize(width, height); 

    //Set picture size to a multiple of previewSize to maintain aspect ratio AND minimum capture width 
    //LogUtils.info("CheckCapture", "Picture Size: " + String.valueOf(width*factor) +"x" + String.valueOf(height*factor)); 
    p.setPictureSize(width, height); 
    p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 

    //Set picture format (we can check device capabilities, but all devices at API level 8 should support JPEG) 
    p.setPictureFormat(PixelFormat.JPEG); 

    //Set new camera parameters 
    try { 
     this.cam.setParameters(p); 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 

    //Setup preview display on our surfaceViewHolder 
    try { 
     this.cam.setPreviewDisplay(surfaceHolder); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    //Start preview 
    this.cam.startPreview(); 
    this.isPreviewRunning = true; 
} 
+0

Nó có vẻ như một vấn đề tôi có [ở đây] (http://stackoverflow.com/questions/11676726/its-a-kind-of-magic-videoview-and-displaying-videos- trên-android-3-1-vs-4-1) nhưng với video và với cùng một thiết bị. Bạn đã sửa nó à? – 2dvisio

+0

Thật không may tôi đã từ bỏ và lấy một cách tiếp cận tương tự như của dinesh. Lấy hình ảnh từ việc chụp và hiển thị nó trong một ImageView như vậy, 'imageView.setImageBitmap (ImageUtils.jpegDecode (dữ liệu));' –

Trả lời

3

trên btn_click.onclickListener sử dụng phương pháp gọi lại như sau

_btn_click.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      ShutterCallback shutterCallBack = new ShutterCallback() { 
       @Override 
       public void onShutter() {} 
      }; 

      PictureCallback pictureCallBack = new PictureCallback() { 
       @Override 
       public void onPictureTaken(byte[] data, Camera camera) {} 
      }; 

      PictureCallback pictureCallBackJPG = new PictureCallback() { 
       @Override 
       public void onPictureTaken(byte[] data, Camera camera) { 

        Bitmap capturedBitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 

       } 
      }; 
      setFlashMode(); 
      camera.takePicture(shutterCallBack, pictureCallBack, 
        pictureCallBackJPG); 
      showProgressDialog("Bitte warten", CameraCaptureActivity.this); 
     } 
    }); 

trong dòng chính mã này là

Bitmap capturedBit map = BitmapFactory.decodeByteArray (dữ liệu, 0, dữ liệu.length);

sử dụng captBitmap trong imageview.setImageBitmap (capturedBitmap); để hiển thị hình ảnh.

Chúc mừng Mã hóa

+0

Tôi đã cố gắng tránh điều này, nhưng nó có thể là câu trả lời duy nhất. Cảm ơn! –

+0

Chào mừng bạn thân mến nhất –

Các vấn đề liên quan