Problemas para tomar fotos con Android (Cámara vertical | Retrato)
Con el siguiente código muestra una vista previa de la cámara verticalmente y funciona .. PERO !! ¡Consigo una foto en paisaje! 🙁
¿Cómo puedo construirlo verticalmente? Tengo la vista preliminar en vertical, pero no puedo guardar la imagen verticalmente.
- Evento del dispositivo Android onConfigurationChanged no controla la orientación
- Problema de orientación de Android
- Android: screenOrientation = "sensorPortrait" no funciona en API +17
- Android Video no se ajusta a la anchura en el retrato de la videovista y no ocupa la pantalla completa en el paisaje
- Bloquear la aplicación del teléfono Android en el modo Retrato
Saludos y gracias, Fran
AL HACER CLIC
public void onClick(View arg0) { camera.takePicture(myShutterCallback, myPictureCallback_RAW, myPictureCallback_JPG); }
AVANCE
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { if (previewing) { camera.stopPreview(); previewing = false; } if (camera != null) { /* * camera.setPreviewDisplay(surfaceHolder); camera.startPreview(); * previewing = true; */ Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(width, height); camera.setParameters(parameters); // Condicions per utilitzar la orientacio adecuada segons el sdk if (Integer.parseInt(Build.VERSION.SDK) >= 8) setDisplayOrientation(camera, 90); else { if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { parameters.set("orientation", "portrait"); parameters.set("rotation", 90); } if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { parameters.set("orientation", "landscape"); parameters.set("rotation", 90); } camera.setParameters(parameters); } // camera.startPreview(); previewing = true; } }
TOMAR FOTO
PictureCallback myPictureCallback_JPG = new PictureCallback() { @Override public void onPictureTaken(byte[] arg0, Camera arg1) { // intentar canvia horientacio Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); //bitmapPicture. OutputStream imageFileOS; try { imageFileOS = new FileOutputStream(String.format("/sdcard/DCIM/iboo/captura.jpg")); imageFileOS.write(arg0); imageFileOS.flush(); imageFileOS.close(); // Missatge en cas de capturar l'imatge correctament Toast.makeText(Principal.this, "Imatge Capturada!", Toast.LENGTH_LONG).show(); MostrarFoto("/sdcard/DCIM/iboo/captura.jpg"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // camera.startPreview(); } };
- Android: orientación de la vista previa de la cámara en modo vertical
- Phonegap / HTML5 y la pantalla de Android redimensionan el problema en rotación de paisaje a retrato
- Android: la vista previa de la cámara es lateral
- Exploded retrato Salida HDMI en Android (Samsung Galaxy S III)
- Cómo configurar framelayout para el paisaje, incluso si mi actividad está en modo retrato en android 2.3.1
- Android (ActionBarSherlock) ¿Hay alguna manera de mantener la misma altura de ActionBar tanto en el retrato y el paisaje?
- Cómo cargar el archivo xml diferente en el cambio de orientación en android
- Android VideoView no se reproduce Orientación de retrato
Es la solución que implementé. Funciona perfectamente. Espero que eso ayude.
PictureCallback myPictureCallback_JPG = new PictureCallback() { @Override public void onPictureTaken(byte[] arg0, Camera arg1) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 6; options.inDither = false; // Disable Dithering mode options.inPurgeable = true; // Tell to gc that whether it needs free // memory, the Bitmap can be cleared options.inInputShareable = true; // Which kind of reference will be // used to recover the Bitmap // data after being clear, when // it will be used in the future options.inTempStorage = new byte[32 * 1024]; options.inPreferredConfig = Bitmap.Config.RGB_565; bMap = BitmapFactory.decodeByteArray(arg0, 0, arg0.length, options); // others devices if(bMap.getHeight() < bMap.getWidth()){ orientation = 90; } else { orientation = 0; } Bitmap bMapRotate; if (orientation != 0) { Matrix matrix = new Matrix(); matrix.postRotate(orientation); bMapRotate = Bitmap.createBitmap(bMap, 0, 0, bMap.getWidth(), bMap.getHeight(), matrix, true); } else bMapRotate = Bitmap.createScaledBitmap(bMap, bMap.getWidth(), bMap.getHeight(), true); FileOutputStream out; try { out = new FileOutputStream( String.format("/sdcard/DCIM/test/screen.jpg")); bMapRotate.compress(Bitmap.CompressFormat.JPEG, 90, out); if (bMapRotate != null) { bMapRotate.recycle(); bMapRotate = null; } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } camera.startPreview(); MostrarFoto(imageInSD); editor = prefs.edit(); editor.putString("PathSeleccio", imageInSD); editor.commit(); } };
Echa un vistazo aquí .
Camera.Parameters param; param = camera.getParameters(); Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); if(display.getRotation() == Surface.ROTATION_0) { camera.setDisplayOrientation(90); param.setRotation(90); } if(display.getRotation() == Surface.ROTATION_270) { camera.setDisplayOrientation(180); param.setRotation(180); } camera.setParameters(param); camera.takePicture(shutterCallback, rawCallback, jpegCallback);
Para configurar la orientación de la imagen, utilice el siguiente código:
Matrix mat = new Matrix(); mat.postRotate(90); image_to_upload = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(), myImage.getHeight(), mat, true);
En realidad no es necesario girar mapa de bits. Es consumir memoria / lento etc .. Parece que es mejor en su caso (guardar en el archivo justo después del disparo) para actualizar las etiquetas Exif en un archivo JPEG , por ejemplo:
int degrees = 90; ExifInterface exif = new ExifInterface(path); exif.setAttribute(ExifInterface.TAG_ORIENTATION, String.valueOf(degrees)); exif.saveAttributes();
- Desactivar ventanas emergentes y alarmboxes en la vista web de android
- ¿Cómo llamar a un método cada vez que se está viendo una actividad?