2012-03-06 32 views
6

Tôi đang cố gắng đặt camera ở chế độ xem bề mặt theo hướng dọc trên điện thoại Android. Tôi đã sử dụng http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html để đặt máy ảnh ở chế độ xem bề mặt. Tuy nhiên máy ảnh được quay 90 độ, vì vậy tôi đã thử làm setDisplayOrientation (90) để sửa chữa nó, nhưng điều này squashes hình ảnh (nó có lẽ không phải là thay đổi kích thước bề mặt đúng cách ??). Làm thế nào tôi có thể làm cho nó để máy ảnh không được squished?Máy ảnh đang duỗi ở chế độ dọc

Trả lời

6

Bạn cần đổi kích thước hình ảnh theo vòng xoay. Xem here để biết ví dụ.

+0

Chiều cao và chiều rộng là gì trong ví dụ đó? Tôi muốn xem trước khoảng một nửa màn hình, nhưng tôi không muốn hardcode giá trị để nó có thể hoạt động trên các kích thước màn hình khác nhau – user1154920

+0

Đây là phương thức gọi lại SurfaceHolder do đó các tham số chiều cao và chiều rộng của phương thức sẽ được thiết lập bởi phần cứng. Nếu bạn muốn xem trước của bạn là một nửa của màn hình, sau đó chỉ cần đặt chúng trong các câu lệnh 'if' như: parameters.setPreviewSize (width/2, height/2); –

2

Nếu bạn đang sử dụng trình diễn API Android, bạn cần sửa đổi chức năng OnLayout().

Về cơ bản bản trình diễn API Android, đặt kích thước xem trước theo tỷ lệ khung hình sao cho hình ảnh xem trước bị thu nhỏ và hiển thị ở giữa màn hình với kích thước nhỏ ở chế độ dọc.

Ngay cả khi chúng tôi thiết lập hướng màn hình sang chế độ Chân dung, chiều rộng và chiều cao xem trước không bị thay đổi. Đó là lý do tại sao hình ảnh xem trước bị đổ.

-2

sử dụng chức năng này cho hình ảnh thay đổi kích thước nó sẽ hữu ích cho bạn

public Bitmap resize(Bitmap img,int Width,int Height){ 

    int width = img.getWidth(); 

    int height = img.getHeight(); 

    int newWidth = (int) Width; 

    int newHeight = (int) Height; 

    // calculate the scale - in this case = 0.4f 
    float scaleWidth = ((float) newWidth)/width; 

    float scaleHeight = ((float) newHeight)/height; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 

    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

    // rotate the Bitmap 
    //matrix.postRotate(45); 

    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true); 

    return resizedBitmap; 

} 
0

Điều duy nhất mà làm việc đối với tôi là

Trong mã mCamera.setDisplayOrientation(90);

Cách bố trí có fill_parent cho cả heightwidth.

Và tệp kê khai có android:screenOrientation="portrait"

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