una tomar samsung pantalla hacer como celular captura android android-camera surfaceview image-capture camera-view

tomar - Cómo capturar una imagen desde una vista de cámara personalizada en Android?



como hacer una captura de pantalla en el celular (6)

Necesito capturar la imagen de la parte requerida de la pantalla .

capturar la imagen de la cámara .

en ese momento, otro contenido de pantalla tal como es .

¿Cómo es esto posible ?


Si la parte de la pantalla es en realidad una vista, puede capturar solo esta vista. Me gusta esto:

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(),view.getHeight(),Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.draw(canvas);

Si desea capturar solo una pequeña parte de una vista, debe calcular el rectángulo de este lado. Entonces:

Bitmap bitmap = Bitmap.createBitmap(rect.width(),rect.height(),Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.save(); canvas.translate(-rect.left,-rect.top); view.draw(canvas); canvas.restore();

Es solo un pseudocódigo, pero espero que entiendas la idea. Simplemente traduzca y dibuje solo la parte que necesita.


Usa TextureView para obtener una vista previa, establece layout_width y layout_height como quieras. aquí está el código:

public class MainActivity extends Activity implements TextureView.SurfaceTextureListener { private Camera mCamera; private TextureView mTextureView; /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTextureView = (TextureView) findViewById(R.id.textureView); mTextureView.setSurfaceTextureListener(this); } @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i2) { mCamera = Camera.open(); try { mCamera.setPreviewTexture(surfaceTexture); mCamera.setDisplayOrientation(90); mCamera.startPreview(); } catch (IOException exception) { } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) { //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { mCamera.startPreview(); mCamera.release(); return true; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { //To change body of implemented methods use File | Settings | File Templates. } }

y archivo xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <TextureView android:layout_gravity="center" android:id="@+id/textureView" android:layout_width="200dp" android:layout_height="300dp"/> </LinearLayout>


Utilizo CameraPreview en la aplicación ApiDemos y la edito como su requisito.

Primero, copie el código de la clase Preview en un nuevo archivo de clase en el mismo paquete para que sea público y pueda declararlo en el archivo de diseño xml. Recuerde agregar un constructor más de la siguiente manera:

public Preview(Context context, AttributeSet attrs) { super(context, attrs); mSurfaceView = new SurfaceView(context); addView(mSurfaceView); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = mSurfaceView.getHolder(); mHolder.addCallback(this); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }

Archivo de diseño de muestra con ancho y alto de muestra:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Abow"/> <com.example.android.apis.graphics.Preview android:id="@+id/camera_view" android:layout_width="240dp" android:layout_height="180dp"> </com.example.android.apis.graphics.Preview> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Below"/> </LinearLayout>

En el método onCreate () de la actividad CameraPreview, cambie la parte setContentView de la siguiente manera:

setContentView(R.layout.camera_layout); mPreview = (Preview) findViewById(R.id.camera_view);


Ya creé ese tipo de cámara. Lo que hice fue cubrir la otra área de la cámara con una imagen, cortar la parte central de la imagen y guardarla como archivo png, para hacer que el centro sea transparente.

Establecerá la imagen de fondo de su marco (vista previa de la cámara) con esa imagen. Para que parezca que la cámara es solo la parte que es transparente o el círculo.

Utilicé este tutorial para abrir, crear una vista previa y tomar una foto desde el dispositivo de la cámara http://developer.android.com/guide/topics/media/camera.html

en esta parte (puede ver esto en el enlace que proporciono arriba)

private PictureCallback mPicture = new PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { //this is where you crop your image BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inMutable = true; Bitmap bitmap = BitmapFactory .decodeByteArray(data, 0, data.length, opt); bitmap=Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas mcanvas=new Canvas(bitmap); //do the cropping here, bitmap is the image you will use to crop } }

siga este tutorial sobre cómo recortar la imagen para hacer un círculo Recorte del área circular de mapa de bits en Android


intente utilizar Surface View para crear una vista dinámica de la cámara y establecer su porción requerida.

siguiente código try

variables establecidas Nivel de clase (Global)

Button btn_capture; Camera camera1; SurfaceView surfaceView; SurfaceHolder surfaceHolder; public static boolean previewing = false;

Código siguiente en el método onCreate ()

getWindow().setFormat(PixelFormat.UNKNOWN); surfaceView = new SurfaceView(this); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); btn_capture = (Button) findViewById(R.id.button1); surfaceView.setBackgroundResource(R.drawable.your_background_image); if(!previewing){ camera1 = Camera.open(); if (camera1 != null){ try { camera1.setDisplayOrientation(90); camera1.setPreviewDisplay(surfaceHolder); camera1.startPreview(); previewing = true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } btn_capture.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub if(camera != null) { camera1.takePicture(myShutterCallback, myPictureCallback_RAW, myPictureCallback_JPG); } } });

Siguiente código puesto después de crear () en tu clase .

ShutterCallback myShutterCallback = new ShutterCallback(){ public void onShutter() { // TODO Auto-generated method stub }}; PictureCallback myPictureCallback_RAW = new PictureCallback(){ public void onPictureTaken(byte[] arg0, Camera arg1) { // TODO Auto-generated method stub }}; PictureCallback myPictureCallback_JPG = new PictureCallback(){ public void onPictureTaken(byte[] arg0, Camera arg1) { // TODO Auto-generated method stub Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); Bitmap correctBmp = Bitmap.createBitmap(bitmapPicture, 0, 0, bitmapPicture.getWidth(), bitmapPicture.getHeight(), null, true); }}; public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub if(previewing){ camera1.stopPreview(); previewing = false; } if (camera1 != null){ try { camera1.setPreviewDisplay(surfaceHolder); camera1.startPreview(); previewing = true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub camera1.stopPreview(); camera1.release(); camera1 = null; previewing = false; }

en AndroidManifest.xml otorgar permisos de usuario .

<uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.camera.front" android:required="false"/>

y tampoco se olvidó (implementa SurfaceHolder.Callback) a la clase.