2016-09-28 2 views
6

Ich benutze benutzerdefinierte Kamera und funktioniert gut, aber das Problem ist Bild spart mit sehr niedriger (schlechte) Qualität. Um damit fertig zu werden, habe ich alle Vorschläge und Implementierungen ausprobiert. Wie,Bildqualität ist schlecht mit benutzerdefinierten Kamera

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

das funktioniert nicht. Danach habe ich verwendet

Dies funktioniert auch nicht. Seine Einsparung bei schlechter Qualität noch.

Hinweis: Kamera Vorschau zeigt ordnungsgemäß mit guter Qualität, aber das Problem ist beim Speichern des aufgenommenen Bildes in SDCard-Ordner.

Erweiterte Hilfe würde geschätzt werden !!

+0

nach dem zweiten Code zu entfernen gelöst Sie Ihre 'Image' Sie die Größe ?? – Ironman

+0

Haben Sie diese Parameter nach dem Ändern Ihrer Kamera hinzugefügt? So etwas wie mCamera.setParameters (cameraParams); – Prateek

+0

Wie machst du ein Bild von der Kamera? Kannst du den Code zeigen? –

Antwort

5

Schließlich mein Problem gelöst müssen.

Hier wurde ich Einstellung parameters für die Vorschau-Kamera, bevor ich das Bild wurde Einfangen

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(); 
      } 
     } 
    }); 
} 

Also, bevor ich diese Funktion in meinem Fragment namens i-Parameter eingestellt haben, bevor dieser Methode.

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

schließlich nach mPreview.setParams(params);

+0

ich bin auf der Suche nach diesem und können Sie mir sagen, für benutzerdefinierte Kamera, was Sie verwendet? wie jede Bibliothek! Vielen Dank im Voraus. –

+0

Nein. Ich habe keine benutzerdefinierte Bibliothek verwendet. Ich habe benutzerdefinierte Klasse für die Kameravorschau verwendet und danach habe ich nach meiner Anforderung geändert! Arbeitest du mit einer benutzerdefinierten Kamera? @RuchaBhatt – Piyush

+0

Können Sie bitte Ihre Lösung erarbeiten. Ich setze Parameter auf mCamera nicht mPreview. Ich stelle Parameter vor mCamera.startPreview(); Aber ich bekomme niedrige Bildqualität. – seema

1

kann ich Ihnen Methoden zeigen für die Vorschau Größe zurückzusetzen:

Sie sollten Ihre Parameter der Vorschau in die Kamera ändern.

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; 
    } 

und nach müssen Sie das Layout ändern Größen

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(); 
    } 

und wenn Sie

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

Ich habe meine eigene benutzerdefinierte Kamera Vorschau Klasse – Piyush

Verwandte Themen