2012-01-09 32 views
8

Tôi đang viết một ứng dụng Android nhỏ nơi người dùng có thể đặt hình ảnh bên trong bản xem trước trực tiếp của máy ảnh và chụp một bức ảnh về điều này. Các ứng dụng sau đó sẽ kết hợp hai hình ảnh một cách thích hợp - Tất cả điều này là làm việc tốt.Android xử lý sự khác biệt giữa kích thước/tỷ lệ xem trước và kích thước SufaceView thực tế như thế nào?

Tôi hiểu rằng bạn có thể nhận/đặt PreviewSize bằng Camera.getParameters(), tôi cho rằng điều này có liên quan đến kích thước của "nguồn cấp dữ liệu máy ảnh" trong thời gian thực.

Tuy nhiên, kích thước của SurfaceView của tôi nơi xem trước máy ảnh được hiển thị khác với báo cáo (và sử dụng) PreviewSizes được báo cáo. Ví dụ, trong trình giả lập SurfaceView có sẵn của tôi xảy ra là 360x215, trong khi PreviewSize là 320x240. Tuy nhiên, toàn bộ SurfaceView được lấp đầy với bản xem trước.

Nhưng hình ảnh được tạo ra cuối cùng là (cũng?) 320x240. Làm cách nào để android bù đắp cho những khác biệt về kích thước và tỷ lệ co? Hình ảnh có bị cắt ngắn không? Hoặc tôi chỉ đơn giản là hiểu lầm những gì PreviewSize là về - là điều này liên quan đến kích thước của các hình ảnh được tạo ra, hoặc là nó liên quan đến "xem trước thời gian thực" đó là dự trên SurfaceView? Không. Có bất kỳ ví dụ máy ảnh không tầm thường nào đối phó với điều này không?

Tôi cần biết cách chuyển đổi diễn ra, cuối cùng, sao chép/chia tỷ lệ hình ảnh chính xác thành ảnh, do đó, những câu hỏi này.

+0

Bạn có thể muốn xem câu trả lời của tôi cho chính mình cho một câu hỏi tương tự: http://stackoverflow.com/a/18159351/994834 – goto10

Trả lời

1

Tôi đang cố gắng tìm ra điều này. Đây là những gì tôi phát hiện ra cho đến nay ..

  • Chế độ xem bề mặt có bề mặt bên trong được gọi là mSurface thực sự được sử dụng làm nguồn cấp dữ liệu máy ảnh và bộ mã hóa. Vì vậy, bộ đệm này phải là kích thước thực tế mà bạn muốn ghi âm.
  • Bạn có thể thiết lập kích thước của mSurface này là độc lập với SurfaceView bằng setFixedSize phương pháp
  • Bây giờ bạn có thể muốn thực hiện một ghi HD nên mSurface nhu cầu với độ phân giải 1280x760 nhưng bạn SurfaceView không thể là lớn (Giả sử bạn đang chạy trên điện thoại có màn hình WVGA). Vì vậy, bạn cố gắng đặt ở độ phân giải nhỏ hơn 1280x760 cũng duy trì cùng một tỷ lệ khung hình.
  • Android giờ đây tiến hành thay đổi kích thước trên đệm HD để có được độ phân giải xem trước, cắt không được thực hiện, nó chỉ được thay đổi kích cỡ cho SurfaceView reoslutions
  • Vì vậy, vào thời điểm này cả mSurfacepreviewSize mà bạn thiết lập để máy ảnh có độ phân giải tương tự và do đó việc quay video kết quả cũng sẽ có cùng độ phân giải.

Điều đó đang được nói rằng tôi vẫn đang đấu tranh để máy ghi âm VGA hoạt động trên Nexus S, nó đang hoạt động trên thiết bị LG Maha. :)

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