E 'possibile catturare un'immagine senza mostrare l'anteprima della fotocamera ?, ho il requisito che dovrei essere in grado di catturare l'immagine da una discussione o da un servizio, senza disturbare l'applicazione in primo piano, dove non voglio mostrare l'anteprima della fotocamera, ma voglio comunque catturare l'immagine sullo sfondo e memorizzarla nel dispositivocome prendere l'acquisizione della fotocamera senza un'anteprima da un servizio o un thread?
risposta
Prova questo codice. Farà clic su un'immagine all'avvio dell'attività. Ha un'anteprima, ma la dimensione dell'anteprima è impostata su 0 per 0 dp.
package fortyonepost.com.pwop;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.ImageView;
public class TakePicture extends Activity implements SurfaceHolder.Callback
{
//a variable to store a reference to the Image View at the main.xml file
private ImageView iv_image;
//a variable to store a reference to the Surface View at the main.xml file
private SurfaceView sv;
//a bitmap to display the captured image
private Bitmap bmp;
//Camera variables
//a surface holder
private SurfaceHolder sHolder;
//a variable to control the camera
private Camera mCamera;
//the camera parameters
private Parameters parameters;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//get the Image View at the main.xml file
iv_image = (ImageView) findViewById(R.id.imageView);
//get the Surface View at the main.xml file
sv = (SurfaceView) findViewById(R.id.surfaceView);
//Get a surface
sHolder = sv.getHolder();
//add the callback interface methods defined below as the Surface View callbacks
sHolder.addCallback(this);
//tells Android that this surface will have its data constantly replaced
sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)
{
//get camera parameters
parameters = mCamera.getParameters();
//set camera parameters
mCamera.setParameters(parameters);
mCamera.startPreview();
//sets what code should be executed after the picture is taken
Camera.PictureCallback mCall = new Camera.PictureCallback()
{
@Override
public void onPictureTaken(byte[] data, Camera camera)
{
//decode the data obtained by the camera into a Bitmap
bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
//set the iv_image
iv_image.setImageBitmap(bmp);
}
};
mCamera.takePicture(null, null, mCall);
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// The Surface has been created, acquire the camera and tell it where
// to draw the preview.
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
//stop the preview
mCamera.stopPreview();
//release the camera
mCamera.release();
//unbind the camera from this object
mCamera = null;
}
}
di riferimento: http://www.41post.com/3794/programming/android-take-a-picture-without-displaying-a-preview
Questo è sulla traccia corretta, ma si sta utilizzando un 'Activity' piuttosto che un thread o un servizio in background. – Sam
Questo scatta una foto, ma è ruotata di 90 gradi! Per verificare, ho reso la vista di superficie 200x200 pixel invece di 0 larghezza. La vista di superficie mostra anche l'immagine lateralmente. – Raja
è possibile utilizzare un manichino surfaceholder.callback
private SurfaceHolder.Callback dummySurfaceCallback = new SurfaceHolder.Callback()
{
@Override
public void surfaceCreated(SurfaceHolder holder)
{
// do nothing
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
// do nothing
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
// do nothing
}
};
e applicarlo a un surfaceholder (previewHolder)
preview = (SurfaceView) findViewById(R.id.preview);
previewHolder = preview.getHolder();
previewHolder.addCallback(dummySurfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
e quindi utilizzare il previewholder nella configurazione di previewdisplay in mediarecoreder.
mediaRecorder.setPreviewDisplay(previewHolder.getSurface());
questo metodo avrà un'anteprima schermata nera. questo funziona per me, spero che questo possa essere d'aiuto ...
Non ho potuto accettare risposta per lavorare all'interno della mia attività principale (ha funzionato come attività separata quando ho cambiato la vista di superficie a 1 dpi per 1 dpi, ma dopo aver preso foto, le mie viste dinamiche scomparirebbero).
per scattare foto senza anteprima nella mia attività principale, ho utilizzato il codice da Android - Take picture without preview (la versione modificata segue).
...
private SurfaceView sv;
Camera myCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
...
private void takePhoto() {
Camera.Parameters parameters = myCamera.getParameters();
// myCamera.setDisplayOrientation(180);
// parameters.setPictureFormat(ImageFormat.JPEG);
// parameters.setPictureFormat(PixelFormat.JPEG);
myCamera.setParameters(parameters);
SurfaceView mview = sv;
try {
myCamera.setPreviewDisplay(mview.getHolder());
myCamera.startPreview();
myCamera.takePicture(null, null, photoCallback);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Camera.PictureCallback photoCallback=new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
saveMyPhotoToParse(data);
// Log.i(DEBUG_TAG,"image pseudo saved");
}
};
eccezione puntatore nullo su questa riga myCamera.setPreviewDisplay (mview.getHolder()); –
Effettuare l'anteprima all'interno di un'altra disposizione lineare e modificare l'alfa valori 255 pieno trasparente 0 piena opaco
cameraPreview_holderLL.setAlpha (255); // abilita l'anteprima
cameraPreview_holderLL.setAlpha (0 // disabilita l'anteprima
<LinearLayout
android:id="@+id/camera_preview_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/camera_preview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
- 1. Come recuperare l'immagine dalla fotocamera senza utilizzare l'app fotocamera (tramite un servizio)
- 2. Android: È possibile scattare una foto con la fotocamera da un servizio senza interfaccia utente
- 3. Apertura della fotocamera in un altro processo
- 4. Come si interrompe un'applicazione del servizio Windows da un thread?
- 5. Come prendere un primo carattere della stringa
- 6. Come terminare o sospendere un thread di Rust da un altro thread?
- 7. ricostruzione 3D da immagini calibrate della fotocamera
- 8. Compojure o Noir per un servizio web senza UI?
- 9. StartActivityForResult da un servizio
- 10. Come prendere un OperationFailure da MongoDB e PyMongo in Python
- 11. Uscire da un thread
- 12. Come arrestare correttamente un servizio Windows .NET con più thread?
- 13. Android 6.0 RuntimeException: impossibile connettersi al servizio della fotocamera
- 14. get SharedPreferences da un servizio
- 15. Stampa da un servizio .NET
- 16. Come chiamare un servizio Web SOAP da un modulo Wordpress?
- 17. Come implementare un servizio di raccolta thread-safe?
- 18. Come posso prendere un 404?
- 19. Android: come creare un widget di anteprima della fotocamera personalizzato?
- 20. Android: utilizzo della rete in un servizio
- 21. Come catturare un video (e audio) in python, da una fotocamera (o webcam)
- 22. Avvio del servizio da un altro servizio
- 23. Posso generare un thread da un servlet?
- 24. Come posso condividere un servizio tra le attività senza riavviarlo?
- 25. PHP: come posso prendere un singolo file da una directory senza eseguire la scansione dell'intera directory?
- 26. Three.js Spostamento della fotocamera lungo un percorso dopo l'evento click
- 27. Aggiornamento della GUI da un altro thread in java (swing)
- 28. Thread di applicazioni vs thread di servizio
- 29. Fare un input di file iOS direttamente all'app della fotocamera?
- 30. Arresto di un thread all'interno di un servizio
Hai visto queste altre domande? http://stackoverflow.com/questions/2386025/android-camera-without-preview http://stackoverflow.com/questions/7398897/how-to-use-camera-to-take-picture-in-a-background -service-on-android –
qualsiasi programma di esempio per utilizzare la fotocamera frontale senza anteprima e salvare la scheda SD – city0666