2016-10-25 14 views
6

So sánh rất đơn giản: Tôi chụp ảnh bằng Máy ảnh tùy chỉnh sử dụng CameraManager. Sau đó, tôi chụp ảnh bằng camera Galaxy Note 5 mặc định. Kích thước lớn nhất có sẵn cho CameraManager là 3264 by 1836 vì vậy tôi sử dụng và đặt máy ảnh Samsung ở cùng độ phân giải đó. Kết quảCách tăng chất lượng ảnh chụp bằng CameraManager

  • Thuyết minh số 5: Tôi có thể xem chi tiết trong bức ảnh
  • CameraManager: Tôi không thể nhìn thấy chi tiết. Hình ảnh có chất lượng thấp.

Sau đó, tôi cố gắng thiết lập các hình ảnh CameraManager với

captureBuilder.set(CaptureRequest.JPEG_QUALITY, (byte) 100); 

Vẫn không có sự thay đổi. Cũng chỉ có một thay đổi: kích thước tệp của ảnh được chụp bằng CameraManager trở thành 2,3MB (trước đây là 0,5MB) trong khi kích thước của ảnh Samsung (vẫn còn) 1,6MB. Vì vậy, ngay cả với kích thước lớn hơn, ảnh được chụp bằng CameraManager vẫn có chất lượng thấp hơn. Bất kỳ ý tưởng nào về cách khắc phục sự cố này: Làm cách nào để làm cho ảnh được chụp bằng CameraManager có chất lượng giống với ảnh được chụp bằng ứng dụng Máy ảnh mặc định đi kèm với Note 5?

+0

Ngoài ra, tại sao máy ảnh Samsung có thể lên tới '5312x2088' trong khi Máy ảnh báo cáo tối đa là' 3264 x 1836'? –

+0

bạn có đang sử dụng lớp 'android.hardware.Camera' cũ không? – nandsito

+0

Xin lỗi vì sự chậm trễ. Tôi đang sử dụng 'android.hardware.camera2' –

Trả lời

0

Tôi nghĩ chất lượng tốt hơn trong ứng dụng máy ảnh cổ phiếu Samsung vì nó sử dụng Samsung Camera SDK. Đó là một phần mở rộng của Camera2 API.

SDK cung cấp các chức năng bổ sung hữu ích (ví dụ: Tự động lấy nét pha). Hãy thử cũng cho phép ổn định quang học ống kính.

1

Đây là một số phương pháp khi chúng tôi làm việc với người quản lý Camer, phương pháp này có thể giúp bạn.

Các ứng dụng Camera Android mã hóa ảnh trong tiếp cận mục đích giao cho onActivityResult() như là một Bitmap nhỏ trong tính năng bổ sung, dưới phím "dữ liệu". Đoạn mã sau truy xuất hình ảnh này và hiển thị nó trong một ImageView.

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 
      mImageView.setImageBitmap(imageBitmap); 
     } 
    } 
    private File createImageFile() throws IOException { 
     // Create an image file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
     String imageFileName = "JPEG_" + timeStamp + "_"; 
     File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
     File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
     ); 

     // Save a file: path for use with ACTION_VIEW intents 
     mCurrentPhotoPath = "file:" + image.getAbsolutePath(); 
     return image; 
    } 
private void setPic() { 
    // Get the dimensions of the View 
    int targetW = mImageView.getWidth(); 
    int targetH = mImageView.getHeight(); 

    // Get the dimensions of the bitmap 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
    int photoW = bmOptions.outWidth; 
    int photoH = bmOptions.outHeight; 

    // Determine how much to scale down the image 
    int scaleFactor = Math.min(photoW/targetW, photoH/targetH); 

    // Decode the image file into a Bitmap sized to fill the View 
    bmOptions.inJustDecodeBounds = false; 
    bmOptions.inSampleSize = scaleFactor; 
    bmOptions.inPurgeable = true; 

    Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); 
    mImageView.setImageBitmap(bitmap); 
} 
Các vấn đề liên quan