2016-09-28 19 views
6

Tôi đang sử dụng máy ảnh tùy chỉnh và hoạt động tốt nhưng vấn đề là hình ảnh được tiết kiệm với chất lượng rất thấp (kém). Để khắc phục nó, tôi đã thử tất cả các đề xuất và triển khai. Giống như,Chất lượng hình ảnh kém sử dụng máy ảnh tùy chỉnh

parameters.setJpegQuality(100); 
parameters.setPictureFormat(ImageFormat.JPEG); 

tính năng này không hoạt động. Sau đó tôi đã sử dụng

List<Size> sizes = cameraParams.getSupportedPictureSizes(); 
Camera.Size size = sizes.get(0); 
for(int i=0;i<sizes.size();i++) 
{ 
if(sizes.get(i).width > size.width) 
size = sizes.get(i); 
} 
cameraParams.setPictureSize(mPictureSize.width, mPictureSize.height); 

Điều này cũng không hoạt động. Tiết kiệm của nó với chất lượng kém vẫn còn.

Lưu ý: Xem trước máy ảnh hiển thị phù hợp với chất lượng tốt nhưng vấn đề là khi lưu ảnh đã chụp vào thư mục sdcard.

Trợ giúp nâng cao sẽ được đánh giá cao !!

+0

sau mã thứ hai của bạn làm bạn thay đổi kích thước 'của bạn Image' ?? – Ironman

+0

Bạn cuối cùng đã thêm các thông số đó vào máy ảnh của mình sau khi thay đổi chúng chưa? Một cái gì đó như mCamera.setParameters (cameraParams); – Prateek

+0

cách Bạn chụp ảnh từ máy ảnh? bạn có thể hiển thị mã không? –

Trả lời

5

Cuối cùng vấn đề của tôi được giải quyết.

Ở đây tôi đã thiết lập parameters cho xem trước máy ảnh trước khi tôi được chụp ảnh

public void takePicture() { 
    mCamera.takePicture(new ShutterCallback() { 
     @Override 
     public void onShutter() { 

     } 
    }, new PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 

     } 
    }, new PictureCallback() { 
     @Override 
     public void onPictureTaken(final byte[] data, Camera camera) { 

      data1 = data; 
      if (mCamera != null) { 
       mCamera.stopPreview(); 
      } 
     } 
    }); 
} 

Vì vậy, trước khi tôi gọi chức năng này trong đoạn của tôi, tôi đã thiết lập các thông số trước khi phương pháp này.

mPreview.setParams(params);// This was the mistake what i have done ! 
mPreview.takePicture(); 

cuối cùng giải quyết sau khi gỡ bỏ mPreview.setParams(params);

+0

Tôi đang tìm kiếm điều này và bạn có thể cho tôi biết về máy ảnh tùy chỉnh những gì bạn đã sử dụng không? giống như bất kỳ thư viện nào! cảm ơn u trước. –

+0

No. Tôi chưa sử dụng bất kỳ thư viện tùy chỉnh nào. Tôi đã sử dụng lớp tùy chỉnh để xem trước máy ảnh và sau đó tôi đã sửa đổi theo yêu cầu của mình! Bạn đang làm việc với máy ảnh tùy chỉnh? @RuchaBhatt – Piyush

+0

Bạn có thể vui lòng xây dựng giải pháp của mình không. Tôi đang thiết lập params để mCamera không mPreview. Tôi đang thiết lập thông số trước mCamera.startPreview(); Nhưng tôi nhận được hình ảnh chất lượng thấp. – seema

1

Tôi có thể hiển thị cho bạn các phương pháp để đặt lại kích thước xem trước:

Bạn nên thay đổi thông số xem trước của mình tại Máy ảnh.

private void setImageSize() { 
     Camera.Size size = CameraUtil.findClosetImageSize(mRxCamera.getNativeCamera(), PREFER_SIZE); 
     mCamera.getNativeCamera().getParameters().setPictureSize(size.width, size.height); 
     WIDTH = size.width; 
     HEIGHT = size.height; 
    } 

và sau Bạn cần thay đổi cách bố trí kích thước

private void resetPreviewSize() { 
     final boolean widthIsMax = mWidth > mHeight; 
     final Camera.Size size = mCamera.getNativeCamera().getParameters().getPreviewSize(); 

     final RectF rectDisplay = new RectF(); 
     final RectF rectPreview = new RectF(); 

     rectDisplay.set(0, 0, mWidth, mHeight); 

     final int width = widthIsMax ? size.width : size.height; 
     final int height = widthIsMax ? size.height : size.width; 
     rectPreview.set(0, 0, width, height); 

     final Matrix matrix = new Matrix(); 
     matrix.setRectToRect(rectDisplay, rectPreview, Matrix.ScaleToFit.START); 
     matrix.invert(matrix); 
     matrix.mapRect(rectPreview); 

     mCameraView.getLayoutParams().height = (int) (rectPreview.bottom); 
     mCameraView.getLayoutParams().width = (int) (rectPreview.right); 
     mCameraView.requestLayout(); 
    } 

và nếu bạn cần

public static Camera.Size findClosetImageSize(Camera camera, Point preferSize) { 
    int preferX = preferSize.x; 
    int preferY = preferSize.y; 
    Camera.Parameters parameters = camera.getParameters(); 
    List<Camera.Size> allSupportSizes = parameters.getSupportedPictureSizes(); 
    Log.d(TAG, "all support Image size: " + dumpPreviewSizeList(allSupportSizes)); 
    int minDiff = Integer.MAX_VALUE; 
    int index = 0; 
    for (int i = 0; i < allSupportSizes.size(); i++) { 
     Camera.Size size = allSupportSizes.get(i); 
     int x = size.width; 
     int y = size.height; 

     int diff = Math.abs(x - preferX) + Math.abs(y - preferY); 
     if (diff < minDiff) { 
      minDiff = diff; 
      index = i; 
     } 
    } 
    return allSupportSizes.get(index); 
} 
+0

Tôi có lớp xem trước máy ảnh tùy chỉnh của riêng mình – Piyush

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