2012-01-05 26 views
9

Tôi đã tạo ứng dụng Máy ảnh tùy chỉnh và tôi đang cố gắng thay đổi độ phân giải của hình ảnh được chụp. Tôi đã đọc xung quanh rằng điều này có thể phụ thuộc vào điện thoại hoặc phiên bản Android?Độ phân giải thiết lập máy ảnh Android

Tôi biết chúng được đặt bằng cách sử dụng setParameters nhưng chỉ không biết cách đặt độ phân giải actuall hoạt động trên tất cả các điện thoại. Tôi muốn nó trở nên nhỏ bé khi lực lượng ứng dụng của tôi đóng cửa. Khi tôi sử dụng hình ảnh thử nghiệm ở 640x348, tác phẩm này sẽ hoạt động như vậy xung quanh kích thước/độ phân giải đó sẽ hoàn hảo.

Có thể dễ dàng sử dụng setPictureSize?

public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 
    camera = Camera.open(); 
    try { 
      Camera.Parameters parameters = camera.getParameters(); 
      if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.set("orientation", "portrait"); 
       camera.setDisplayOrientation(90); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(90); 
      } else { 
       parameters.set("orientation", "landscape"); 
       camera.setDisplayOrientation(0); 
       // Uncomment for Android 2.0 and above 
       parameters.setRotation(0); 
      } 
      camera.setParameters(parameters); 
      camera.setPreviewDisplay(holder); 
     } catch (IOException exception) { 
     camera.release(); 
     } 
     camera.startPreview(); 
    } 

Trả lời

16

Không có setResolution(), chỉ setPictureSize(). Sử dụng getSupportedPictureSizes() trên Camera.Parameters để tìm kích thước bạn muốn hoặc sử dụng thông tin đó để điền ListView hoặc Spinner hoặc thứ gì đó để người dùng chọn kích thước mong muốn. Here is a sample project được cập nhật gần đây để sử dụng getSupportedPictureSizes() để tìm độ phân giải được hỗ trợ nhỏ nhất và sử dụng.

+0

Ok bạn có thể cho tôi biết cách triển khai thực hiện việc thử chạy mã của bạn từ github nhưng chỉ nhận lỗi từ nhật thực? – Matt

+0

Ngoài ra mã sẽ kiểm tra các kích thước được hỗ trợ và sau đó lưu mã đó thành kích thước nhỏ nhất, hoặc cần nhiều hơn? – Matt

+0

@Matt: Tôi không thể giúp bạn với "lỗi từ nhật thực" nếu bạn từ chối nói lỗi là gì. Và tôi không biết cái gì là "nhiều hơn", và vì vậy tôi không thể nói nếu mã đó cần nó. – CommonsWare

10

Đó là quá dễ dàng để nắm bắt hình ảnh với chất lượng cao , ở đây bạn có thể thiết lập độ phân giải của riêng bạn:

mCamera = Camera.open(); 
Camera.Parameters params = mCamera.getParameters(); 

// Check what resolutions are supported by your camera 
List<Size> sizes = params.getSupportedPictureSizes(); 

// Iterate through all available resolutions and choose one. 
// The chosen resolution will be stored in mSize. 
Size mSize; 
for (Size size : sizes) { 
    Log.i(TAG, "Available resolution: "+size.width+" "+size.height); 
     mSize = size; 
    } 
} 

Log.i(TAG, "Chosen resolution: "+mSize.width+" "+mSize.height); 
params.setPictureSize(mSize.width, mSize.height); 
mCamera.setParameters(params); 

Hy vọng điều này sẽ giúp tất cả các bạn.

+0

Có một danh sách các độ phân giải và bạn có thể chọn giữa một phạm vi. Độ phân giải cao nhất sẽ được chọn nếu bạn đặt dấu ngắt; tuyên bố về lần tìm đầu tiên trong vòng lặp này và bạn cũng nên tránh/kiểm tra ngoại lệ thời gian chạy và ngoại lệ OutOfMemory: if (size.width> = 600 && size.width <= 800) { mSize = size; ngắt; } –

+0

@AbhinavSaxena, vâng, ngay cả khi chúng tôi có thể chọn bất kỳ ai trong số họ theo yêu cầu. –

+0

Đó không phải là một truy vấn thay vì một giải pháp. Tôi đã thêm giải pháp của mình vào phần bình luận. Bạn có thể sửa đổi trong câu trả lời của mình. Cảm ơn. –

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