Ich bin zu einer benutzerdefinierten Kamera zu binden und nach dem Fotografieren stelle ich es in der Bildansicht in der gleichen Aktivität wie in der ich Kamera einstellen. Ich habe die Fotos erfolgreich aufgenommen, aber bevor ich das Bild in die Bildansicht einstelle, muss ich es skalieren, was die Bildqualität verringert. Gibt es eine Möglichkeit, das reale Bild zu zeigen, anstatt es zu skalieren?Skalierung des Bildes und der Einstellung in der Bildansicht reduziert die Bildqualität und quetscht es
Meine Bilder sind wie unten Zuerst eine reale Ansicht der Kamera ist, die Oberflächenansicht ist:
Nach Foto Taking es wird:
Der Code Ich bin Verwenden ist:
Camera.PictureCallback picture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
mCamera.stopPreview();
surface_view.setVisibility(View.INVISIBLE);
setupImageDisplay(data);
}
};
private void setupImageDisplay(byte[] data) {
photo = BitmapFactory.decodeByteArray(data, 0, data.length);
photo = scaleDown(photo, true);//scaling down bitmap
imageview_photo.setImageBitmap(photo); //setting bitmap in imageview
}
public Bitmap scaleDown(Bitmap realImage, boolean filter) {
int screenWidth = width;
int screenHeight = height;
Bitmap scaled;
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// Notice that width and height are reversed
scaled = Bitmap.createScaledBitmap(realImage, screenHeight, screenWidth, filter);
int w = scaled.getWidth();
int h = scaled.getHeight();
// Setting post rotate to 90
Matrix mtx = new Matrix();
if (camera_id == Camera.CameraInfo.CAMERA_FACING_FRONT) {
float[] mirrorY = {-1, 0, 0, 0, 1, 0, 0, 0, 1};
Matrix matrixMirrorY = new Matrix();
matrixMirrorY.setValues(mirrorY);
mtx.postConcat(matrixMirrorY);
}
mtx.postRotate(90);
// Rotating Bitmap
realImage = Bitmap.createBitmap(scaled, 0, 0, w, h, mtx, filter);
} else {// LANDSCAPE MODE
//No need to reverse width and height
scaled = Bitmap.createScaledBitmap(realImage, screenHeight, screenWidth, filter);
int w = scaled.getWidth();
int h = scaled.getHeight();
// Setting post rotate to 90
Matrix mtx = new Matrix();
if (camera_id == Camera.CameraInfo.CAMERA_FACING_FRONT) {
float[] mirrorY = {-1, 0, 0, 0, 1, 0, 0, 0, 1};
Matrix matrixMirrorY = new Matrix();
matrixMirrorY.setValues(mirrorY);
mtx.postConcat(matrixMirrorY);
}
mtx.postRotate(180);
// Rotating Bitmap
realImage = Bitmap.createBitmap(scaled, 0, 0, w, h, mtx, filter);
}
return realImage;
}
Nach dem Fotografieren ist das Bild wie gequetscht. Gibt es irgendein Bild, das nach der Skalierung gleich bleibt?
Versuchen Glide Bibliothek zu verwenden, wird es Ihre Bilder automatisch skaliert. –
@MaximeLiege aber im glide musst du nicht die url des bildes angeben? In diesem Fall benutze ich einfache Bitmap – SimpleMan
Nein, Sie können es auch Drawables geben –