Superposition d'images sur la prévisualisation de la Caméra SurfaceView et comment les sauver?
J'ai une SurfaceView qui est utilisé pour dessiner des images, et je tiens à les superposer sur un fil en direct de la caméra du téléphone. J'ai lu Superposition d'images sur la prévisualisation de la caméra surfaceview
et comment dessiner une superposition sur une surfaceview utilisé par l'appareil photo sur android
public class TestCameraOverlayActivity extends Activity {
Bitmap bitmap;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Preview mPreview = new Preview(this);
DrawOnTop mDraw = new DrawOnTop(this);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
setContentView(mPreview);
addContentView(mDraw, new LayoutParams (LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
}
class DrawOnTop extends View {
public DrawOnTop(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLACK);
canvas.drawText("Test Text", 10, 10, paint);
canvas.drawBitmap(bitmap, 0, 0, null);
super.onDraw(canvas);
}
}
class Preview extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
Preview(Context context) {
super(context);
//Install a SurfaceHolder.Callback so we get notified when the
//underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
//The Surface has been created, acquire the camera and tell it where
//to draw.
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
//Surface will be destroyed when we return, so stop the preview.
//Because the CameraDevice object is not a shared resource, it's very
//important to release it when the activity is paused.
mCamera.stopPreview();
mCamera = null;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
//Now that the size is known, set up the camera parameters and begin
//the preview.
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
}
}
si vous l'exécutez, vous pouvez voir sur l'image de prévisualisation SurfaceView, mais ma question est comment faire pour l'enregistrer en format jpeg sur la carte sd. Pouvez-vous donner quelques conseils, si j'ai besoin de conversion de Format pour que je puisse les enregistrer en même temps. Ma solution partielle pour enregistrer l'image seulement
/** Handles data for jpeg picture */
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
try {
//write to local sandbox file system
//outStream = CameraDemo.this.openFileOutput(String.format("%d.jpg",
System.currentTimeMillis()), 0);
//Or write to sdcard
outStream = new FileOutputStream(String.format("/sdcard/%d.jpg",
System.currentTimeMillis()));
outStream.write(data);
outStream.close();
Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
Log.d(TAG, "onPictureTaken - jpeg");
}
};
OriginalL'auteur pengwang | 2011-07-26
Vous devez vous connecter pour publier un commentaire.
Je pense que vous vous demandez comment faire pour fusionner les deux images en une seule.
La première chose que vous devez faire est d'utiliser un AsynchHandler pour enregistrer votre image afin de ne pas bloquer l'INTERFACE utilisateur, qui ne fait pas partie de votre question, mais il sera.
À votre question d'ordre général, il a été demandé et répondu ici en général, vous aurez besoin de fusionner les deux images de pièces et la poignée de mise à l'échelle de votre superposition de l'ensemble ou le composant de l'image des pièces.
OriginalL'auteur Idistic
Que j'ai créé à la suite de l'échantillon de code sur la base de celui-ci, qui taks la photo et de le fusionner avec une superposition de l'image, puis enregistrer l'image finale sur /sdcard/DCIM/CameraAPIDemo.
Il est également intégré avec une application simple qui peut être trouvé ici:
https://github.com/jiahaoliuliu/RealMadridvsBorussia
OriginalL'auteur jiahao