IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Incruster des symboles sur une photo


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Hhh
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Hhh

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut Incruster des symboles sur une photo
    bonjour

    je cherche a mettre des indications en temps réel en utilisant la cam de mon smartphone .
    Comment programmer cela sous android ?
    Pour mettre par exemple un axe X, Y sur l"ecran en même temps que l'image de la cam ?

    existe t'il quelque part des exemples ?

    merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java / C++
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java / C++

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Bonsoir mochel,

    Je n'ai pas d'exemple sous la main, mais j'ai une piste pour vous:

    Afin d'utiliser la caméra du smartphone, il faut utiliser la Camera.

    Une méthode, Camera.setPreviewDisplay(SurfaceHolder holder), de cette classe permet de définir un nouveau SurfaceHolder.

    Ce SurfaceHolder est en fait une interface qui est implémentée par SurfaceView.

    SurfaceView héritant elle même de View, a donc une méthode View.onDraw(Canvas canvas). Cette méthode est protégée, mais on peut la redéfinir en héritant de View, et donc de SurfaceView.

    L'idée est donc d'hériter de SurfaceView, pour pouvoir rajouter votre code dans la méthode onDraw (sans oublier de faire appelle à la méthode parente, pour ne pas perdre l'affichage de ce que voit la caméra).

    Puis de fournir à Camera votre nouvelle vue. Ainsi, vous devriez pouvoir afficher ligne, text... ce que vous voulez quoi !

    J'espère avoir pu vous aider

  3. #3
    Membre confirmé
    Profil pro
    Hhh
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Hhh

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut
    merci pour la réponse

    y aurait quelque part un bout d'exemple sur le net ?

    ça m'aiderai beaucoup


    a+

  4. #4
    Membre extrêmement actif
    Profil pro
    Développeur
    Inscrit en
    Mars 2012
    Messages
    1 970
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 970
    Par défaut
    Tapes Android surfaceview tutorial sur youtube, tu vas trouver des présentations

  5. #5
    Membre confirmé
    Profil pro
    Hhh
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Hhh

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut
    bonjour

    j'arrive a prendre une photo et à la prévisualiser

    par contre pour y mettre une ligne sur la prévualisation , la je coince

    si quelqu'un peut m'aider

    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    package com.eyrolles.android.multimedia;
     
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;
     
    import android.app.Activity;
    import android.content.ContentValues;
    import android.graphics.Bitmap;
    import android.graphics.Paint;
    import android.hardware.Camera;
    import android.hardware.Camera.PictureCallback;
    import android.hardware.Camera.ShutterCallback;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore.Images;
    import android.provider.MediaStore.Images.Media;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
     
    public class CapturePhoto extends Activity implements SurfaceHolder.Callback, PictureCallback, ShutterCallback {
     
    	private SurfaceView surfaceView;
    	private SurfaceHolder surfaceHolder;
    	private Camera camera;
     
    	public void onCreate(Bundle icicle) {
    		super.onCreate(icicle);
    		setContentView(R.layout.main);
    		surfaceView = (SurfaceView)findViewById(R.id.surface_view);
    		surfaceHolder = surfaceView.getHolder();
    		surfaceHolder.addCallback(this);
    		surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
     
     
    		Button prendrePhoto = (Button) findViewById(R.id.btn_prendrePhoto);
    		prendrePhoto.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View arg0) {
    				camera.takePicture(CapturePhoto.this, null, CapturePhoto.this);
    			}
    		});
    	}
     
    	public void surfaceChanged(SurfaceHolder holder, int format, int width,	int height) {
    		if (camera != null) {
    			camera.stopPreview();
    			Camera.Parameters p = this.camera.getParameters();
    			p.setPreviewSize(width, height);
    			this.camera.setParameters(p);
    			try {
    				this.camera.setPreviewDisplay(holder);
    				this.camera.startPreview();
    			} catch (IOException e) {
    				Log.e(getClass().getSimpleName(), "Erreur E/S lors du setPreviewDisplay sur l'objet Camera", e);
    			}
    			// TEST
    	        int intCanvasWidth = width;
    	        int intCanvasHeight = height;
    	        Paint paint = new Paint();
    	        Bitmap mDrawing = Bitmap.createBitmap(intCanvasWidth, intCanvasHeight,Bitmap.Config.RGB_565);
                Random rand = new Random();
                //Affichons 10000 points de toutes les couleurs
                for (int i=0; i < 10000; i++)
                {
                	// Affecter une couleur de manière aléatoire
                	paint.setARGB(255, rand.nextInt(256), rand.nextInt(256), rand.nextInt(256));
    				// Puis dessiner nos points dans le canevas
                	canvas.drawPoint(rand.nextInt(intCanvasWidth), rand.nextInt(intCanvasHeight), paint);
                }
            }
    	        Paint paint = new Paint();
    	}
     
    	public void surfaceCreated(SurfaceHolder holder) {
    		camera = Camera.open();
    	}
     
    	public void surfaceDestroyed(SurfaceHolder holder) {
    		if (camera != null) {
    			camera.stopPreview();
    			camera.release();
    		}
    	}
     
    	public void onPictureTaken(byte[] data, Camera arg1) {
    		ContentValues values = new ContentValues();  
    		values.put(Media.TITLE, "Mon image");  
    		values.put(Media.DESCRIPTION, "Image prise par le téléphone");  
    		Uri uri = getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values);  
    		OutputStream outputStream;
    		try {
    			outputStream = getContentResolver().openOutputStream(uri);
    			outputStream.write(data);  
    			outputStream.flush();  
    			outputStream.close();  
    		} catch (FileNotFoundException e) {
    			Log.e(getClass().getSimpleName(), "Fichier non trouvé à l'écriture de l'image", e);  
    		} catch (IOException e) {
    			Log.e(getClass().getSimpleName(), "Erreur E/S a l'enregistrement de l'image", e);  
    		}  
    		camera.startPreview();
    	}
     
    	public void onShutter() {
    		Log.d(getClass().getSimpleName(), "Clic clac ! ");
    	}
    }

  6. #6
    Membre confirmé
    Profil pro
    Hhh
    Inscrit en
    Septembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Hhh

    Informations forums :
    Inscription : Septembre 2007
    Messages : 62
    Par défaut
    bonjour

    j'ai essayé ça ... mais ca marche pas ....

    merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
     
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;
     
    import android.app.Activity;
    import android.content.ContentValues;
    import android.graphics.Bitmap;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.hardware.Camera;
    import android.hardware.Camera.PictureCallback;
    import android.hardware.Camera.ShutterCallback;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore.Images;
    import android.provider.MediaStore.Images.Media;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
     
    public class CapturePhoto extends Activity implements SurfaceHolder.Callback, PictureCallback, ShutterCallback {
     
    	private SurfaceView surfaceView;
    	private SurfaceHolder surfaceHolder;
    	private Camera camera;
    	private final String TAG = "Svetlin Surface Renderer";
    	private Canvas canvas;
     
     
     
    	public void onCreate(Bundle icicle) {
    		super.onCreate(icicle);
    		setContentView(R.layout.main);
    		surfaceView = (SurfaceView)findViewById(R.id.surface_view);
    		surfaceHolder = surfaceView.getHolder();
    		surfaceHolder.addCallback(this);
    		surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
     
     
    		Button prendrePhoto = (Button) findViewById(R.id.btn_prendrePhoto);
    		prendrePhoto.setOnClickListener(new View.OnClickListener() {
    			public void onClick(View arg0) {
    				camera.takePicture(CapturePhoto.this, null, CapturePhoto.this);
    			}
    		});
    	}
     
     
     
    	public void surfaceChanged(SurfaceHolder holder, int format, int width,	int height) {
    		if (camera != null) {
    			camera.stopPreview();
    			Camera.Parameters p = this.camera.getParameters();
    			p.setPreviewSize(width, height);
    			this.camera.setParameters(p);
    			try {
    				this.camera.setPreviewDisplay(holder);
    				this.camera.startPreview();
    				tryDrawing(holder);
    			} catch (IOException e) {
    				Log.e(getClass().getSimpleName(), "Erreur E/S lors du setPreviewDisplay sur l'objet Camera", e);
    			}
    			// TEST
    				{
    					tryDrawing(holder);
     
    				}
    			}
    	}
     
     
        private void tryDrawing(SurfaceHolder holder) {
            Log.i(TAG, "Trying to draw...");
     
            canvas =holder.lockCanvas();
            if (canvas == null) {
                Log.e(TAG, "Cannot draw onto the canvas as it's null");
            } else {
                drawMyStuff(canvas);
                holder.unlockCanvasAndPost(canvas);
            }
        }
     
        private void drawMyStuff(final Canvas canvas) {
            Log.i(TAG, "Drawing...");
    //        canvas.drawRGB(255, 128, 128);
            // Rectangle
            Paint paint = new Paint();
            paint.setColor(Color.GREEN);
            paint.setStyle(Paint.Style.FILL);
            paint.setStrokeWidth(10);
            float leftx = 20;
            float topy = 20;
            float rightx = 200;
            float bottomy = 200;
            canvas.drawRect(leftx, topy, rightx, bottomy, paint);
        }
     
     
    	public void surfaceCreated(SurfaceHolder holder) {
    		camera = Camera.open();
    	}
     
    	public void surfaceDestroyed(SurfaceHolder holder) {
    		if (camera != null) {
    			camera.stopPreview();
    			camera.release();
    		}
    	}
     
    	public void onPictureTaken(byte[] data, Camera arg1) {
    		ContentValues values = new ContentValues();  
    		values.put(Media.TITLE, "Mon image");  
    		values.put(Media.DESCRIPTION, "Image prise par le téléphone");  
    		Uri uri = getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values);  
    		OutputStream outputStream;
    		try {
    			outputStream = getContentResolver().openOutputStream(uri);
    			outputStream.write(data);  
    			outputStream.flush();  
    			outputStream.close();  
    		} catch (FileNotFoundException e) {
    			Log.e(getClass().getSimpleName(), "Fichier non trouvé à l'écriture de l'image", e);  
    		} catch (IOException e) {
    			Log.e(getClass().getSimpleName(), "Erreur E/S a l'enregistrement de l'image", e);  
    		}  
    		camera.startPreview();
    	}
     
    	public void onShutter() {
    		Log.d(getClass().getSimpleName(), "Clic clac ! ");
    	}
    }

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Java / C++
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java / C++

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Par défaut
    Bonjour mochel,

    Avez vous essayé ce que j'ai proposé dans mon premier poste? Si oui, qu'est-ce qui n'a pas fonctionné?

Discussions similaires

  1. digitalisation des chiffres ( sur une photo)
    Par Lebryanjames dans le forum Visual Studio
    Réponses: 0
    Dernier message: 19/04/2011, 14h15
  2. Connectivité pour délimiter des formes sur une photo
    Par romu37fr dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/06/2007, 13h28
  3. Créer des ballons sur une photo
    Par flamel dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/03/2007, 15h01
  4. Comment avoir des information sur une BD?…
    Par kikimnet dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/02/2005, 09h20
  5. Recupération des selections sur une DBGrille multi Selection
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/11/2004, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo