2012-04-30 34 views
9

Theo trang web của nhà phát triển Android:Android Máy ảnh Preview Rotation

sau android 2.2 có chức năng

"setDisplayOrientation"

để điều chỉnh xoay camera xem trước.

Và cũng theo Trang web dành cho nhà phát triển Android, chúng tôi có thể tìm thấy mã nguồn sau đây.

android.hardware.Camera.CameraInfo info = 
      new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, info); 
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
    int degrees = 0 ; 
    switch (rotation) { 
     case Surface.ROTATION_0 : degrees = 0 ; break ; 
     case Surface.ROTATION_90 : degrees = 90 ; break ; 
     case Surface.ROTATION_180 : degrees = 180 ; break ; 
     case Surface.ROTATION_270 : degrees = 270 ; break ; 
    } 
    int result ; 
    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
     result = (info.orientation + degrees) % 360 ; 
     result = (360 - result) % 360 ; // compensate the mirror 
    } else { // back-facing 

     result = (info.orientation - degrees + 360) % 360 ; 

    } 

Tuy nhiên, tôi không thể làm việc với một số loại Thiết bị. Giống như Samsung Galaxy Y S5360, S5660, YP-G1, YP-G70, v.v.

Chỉ một phần của máy không hoạt động, Galaxy Nexus, SII hoặc một số thiết bị cao cấp, hoạt động tốt.

Không setDisplayOrientation không hỗ trợ hoặc phần mềm thiết bị chưa sẵn sàng?

PS. Tất cả các thiết bị đều là Android 2.3.1 trở lên.

Trợ giúp.

+0

Tôi đang gặp phải vấn đề tương tự trên Galaxy Y. Bạn có tìm thấy điều gì đó không? Tôi muốn biết ít nhất nếu setDisplayOrientation thành công, để khóa nó vào cảnh quan nếu không. –

+0

cuối cùng, không được giải quyết. chỉ làm cho hoạt động bề mặt máy ảnh thành chế độ xem ngang. –

+0

Có ai có danh sách các thiết bị mà lỗi này xảy ra không? Mọi trợ giúp sẽ được đánh giá cao. – patrickfdsouza

Trả lời

-3

Thử đặt hướng xml của chế độ xem máy ảnh thành ngang.

+1

Không phải là một câu trả lời thực sự hữu ích nếu OP sẽ không cảnh quan, ông sẽ không hỏi làm thế nào để có được bức chân dung ở nơi đầu tiên. – Shirkrin

+0

@Shirkrin câu trả lời có vẻ kỳ lạ ở vị trí đầu tiên. Nhưng thực tế là, ở một số thiết bị, bản xem trước của máy ảnh được cố định theo phong cảnh. Nếu bạn điều chỉnh xml của bản xem trước máy ảnh của bạn thành ngang, nó sẽ phù hợp với tất cả thiết bị. Những gì bạn sẽ làm tiếp theo là sử dụng ma trận để xoay hình ảnh được chụp bởi máy ảnh. – dumbfingers

+0

Điều này không có tác dụng. –

3

Vấn đề đặt hiển thị hướng của máy ảnh không hoạt động trên phiên bản hệ điều hành của các thiết bị này về cơ bản là (bánh gừng) nhưng đối với các thiết bị ở trên thì nó hoạt động tốt.

Tôi cũng đã thử điều này trên các thiết bị này, chế độ ngang hoạt động tốt nhưng chế độ dọc có vấn đề. Trong trường hợp buộc phải bức chân dung chỉ buộc các định hướng camera tới 90 độ qua chuyện này trong

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 

camera.setDisplayOrientation(90); 


} 

cũng như bài đã xoay bức tranh trước khi hiển thị hoặc lưu nó thông qua trong

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 


    public void onPictureTaken(byte[] arg0, Camera arg1) { 

    Bitmap bitmapPicture= BitmapFactory.decodeByteArray(arg0, 0, arg0.length); 
     Matrix matrix = new Matrix(); 
    matrix.postRotate(90); 
    int height=bitmapPicture.getHeight(); 
    int width=bitmapPicture.getWidth(); 
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapPicture,height,width, true); 
     Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); 
} 

hy vọng điều này HELPS

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