Android Front Face À La Caméra De Prendre Inversé Les Photos
J'ai cette application qui est en cours d'exécution en mode portrait et en tant que partie d'une activité, j'ai un objet caméra fonctionnant comme un fragment.
J'ai la possibilité de basculer d'avant en arrière face à la caméra et lorsque vous prenez des photos avec la caméra arrière, tout est beau et bien.
Lorsque je prends des photos avec la caméra frontale, cependant, elles sont inversé de 180 degrés.
Maintenant, je sais que c'est probablement quelque chose à voir avec l'orientation étant en mode portrait, mais de l'avoir dans un paysage de tuer l'idée de ma candidature.
Est-il de toute façon cela peut être réglé de sorte que le prendre en photo est le même que celui que vous voyez dans l'aperçu?
listener = new OrientationEventListener(this.getActivity(),SensorManager.SENSOR_DELAY_NORMAL){
@Override
public void onOrientationChanged(int orientation) {
//TODO Auto-generated method stub
if (orientation == ORIENTATION_UNKNOWN) return;
android.hardware.Camera.CameraInfo info =
new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(mCurrentCamera, info);
orientation = (orientation + 45) / 90 * 90;
int rotation = 0;
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
rotation = (info.orientation - orientation + 360) % 360;
} else { //back-facing camera
rotation = (info.orientation + orientation) % 360;
}
if (mCamera.getParameters() != null){
Camera.Parameters mParameters = mCamera.getParameters();
mParameters.setRotation(rotation);
mCamera.setParameters(mParameters);
}
}
};
listener.enable();
if (listener.canDetectOrientation())
Log.d("Orientation Possible", "Orientation Possible");
Le problème, c'est après que j'essaie un de prendre une photo de cette chose se bloque. Aussi, si il fonctionne pendant un moment juste en mode aperçu, il se bloque de nouveau. Je dois sans doute ajouter, que dans une autre méthode, je suis en train de faire cela.
public void switchCamera(Camera camera) {
setCamera(camera);
try {
camera.setPreviewDisplay(mHolder);
} catch (IOException exception) {
Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
}
Camera.Parameters parameters = camera.getParameters();
parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
requestLayout();
try{
camera.setParameters(parameters);
}
catch (RuntimeException ex){
Log.d("Preview", "Failure to set proper parameters");
//need to improve this method
if (mSupportedPreviewSizes != null) {
Camera.Size cs = mSupportedPreviewSizes.get(0);
parameters.setPreviewSize(cs.width, cs.height);
camera.setParameters(parameters);
requestLayout();
//int tempheight = mPreviewSize.height;
//mPreviewSize.height = mPreviewSize.width;
//mPreviewSize.width = tempheight;
}
}
Ce qui est appelé lorsque vous basculez entre les caméras(de l'arrière vers l'avant face à vice-versa). Cela pourrait interférer avec l'orientation de l'écouteur d'événement?
Aussi, lors de l'enregistrement de la photo prise, c'est ce que je l'appelle. Avant c'était juste la prise de données d'un paramètre, mais j'ai essayé de lui faire prendre l'orientation de l'écran. Le problème, c'est l'orientation de l'écran est toujours à 90, n'importe quoi. Si le bitmap sera toujours une rotation de 90 degrés(ce qui est idéal pour prendre des photos avec la caméra arrière) mais à l'inverse quand le prendre avec l'appareil photo frontal. Pourrait un correctif soit mis en œuvre dans cette fonction?
public static Bitmap MakeSquare(byte[] data, int orientation) {
int width;
int height;
//Rotate photo
Matrix matrix = new Matrix();
matrix.postRotate(orientation);
//Convert ByteArray to Bitmap
Bitmap bitPic = BitmapFactory.decodeByteArray(data, 0, data.length);
width = bitPic.getWidth();
height = bitPic.getHeight();
//Create new Bitmap out of the old one
Bitmap bitPicFinal = Bitmap.createBitmap(bitPic, 0, 0, width, height,matrix, true);
bitPic.recycle();
int desWidth;
int desHeight;
desWidth = bitPicFinal.getWidth();
desHeight = desWidth;
Bitmap croppedBitmap = Bitmap.createBitmap(bitPicFinal, 0,bitPicFinal.getHeight() / 2 - bitPicFinal.getWidth() / 2,desWidth, desHeight);
croppedBitmap = Bitmap.createScaledBitmap(croppedBitmap, 528, 528, true);
return croppedBitmap;
}
OriginalL'auteur Valentin | 2012-04-23
Vous devez vous connecter pour publier un commentaire.
Bien. Il semble que j'ai en quelque sorte pris soin d'elle. J'ai utilisé les conseils de cette: Android, appareil photo avant et arrière de l'Orientation , Paysage
Et changé ma MakeSquare fonction:
Cela semble fonctionner et de faire le tour. Bien que je ne suis pas sûr que c'était la meilleure façon, j'en suis content. Maintenant, tout ce que j'ai à faire est de comprendre pourquoi sa ne prend pas dans le bon ratio d'aspect lors de l'utilisation de la caméra frontale.
Résolu mon appareil photo avant de rotation de l'image d'émission (y)
c'est le meilleur.. merci
Je ne vois pas comment cela pourrait fonctionner. Certains appareils (par exemple Nexus 6P) montrer que l'image inversée, tandis que d'autres (par exemple Galaxy Tab Pro 8.4) ne le sont pas. Votre code est toujours retournement de l'image, qui se brisent sur les appareils Samsung, si je ne suis malentendu votre code.
A fonctionné pour moi, merci.
OriginalL'auteur Valentin
Donner ces liens d'essayer:
http://developer.android.com/reference/android/hardware/Camera.html#setDisplayOrientation(int)
http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRotation(int)
Plus précisément, ici, est un morceau de verbiage de la setRotation lien.
"Si les applications souhaitez faire pivoter l'image pour correspondre à l'orientation de ce que voient les utilisateurs, les applications doivent utiliser OrientationEventListener et de la Caméra.CameraInfo. La valeur de OrientationEventListener est relative à l'orientation naturelle de l'appareil. CameraInfo.l'orientation est l'angle entre l'orientation de l'appareil et naturel d'orientation de l'écran. La somme des deux est l'angle de rotation arrière face à la caméra. La différence entre les deux est la rotation d'angle pour la caméra frontale. Notez que les images JPEG de la caméra frontale ne sont pas en miroir comme dans l'affichage de l'aperçu."
J'ai utilisé ce code tel qu'il est, n'est-ce pas de la modifier à tout. Mon appareil photo est mieux maintenant, a encore besoin d'un peu de soins. Je n'ai pas aussi frontale fonctionnalité.
Bonne chance!
OriginalL'auteur JustSomeGuy