Prise de vue dans une application de terminal BlackBerry

  1. Importez les classes et les interfaces requises.
    import net.rim.device.api.amms.control.camera.*;
    import net.rim.device.api.ui.*;
    import net.rim.device.api.ui.component.*;
    import net.rim.device.api.ui.container.*;
    import javax.microedition.media.*;
    import javax.microedition.media.control.*;
  2. Créez le cadre d'application en développant la classe UiApplication. Dans main(), créez une instance de la nouvelle classe et appelez enterEventDispatcher() pour activer l'application et recevoir des événements. Dans le constructeur d'application, appelez pushScreen() pour afficher l'écran personnalisé de l'application. La classe ImageCaptureDemoScreen, décrite à l'étape 3, représente l'écran personnalisé.
    public class ImageCaptureDemo extends UiApplication
    {
         public static void main(String[] args)
         {
              ImageCaptureDemo app = new ImageCaptureDemo();
              app.enterEventDispatcher();
         }
         public ImageCaptureDemo()
         {
              pushScreen(new ImageCaptureDemoScreen());
         }
    }
  3. Créez le cadre de l'écran personnalisé en développant la classe MainScreen. Déclarez les variables des classes Player et VideoControl créées dans le constructeur d'écran, comme décrit à l'étape 5.
    class ImageCaptureDemoScreen extends MainScreen
    {	
        Player _p;
        VideoControl _videoControl;    
        public ImageCaptureDemoScreen()
        {
        }
    }
  4. Dans le constructeur d'écran, initialisez l'appareil photo. Dans un bloc try/catch, créez une instance de la classe Player en appelant Manager.createPlayer(String) et en transmettant le paramètre de codage. Les paramètres jpeg et image/jpeg sont pris en charge. Si vous n'indiquez pas de paramètre de codage, le paramètre de codage par défaut est image/jpeg.
    try 
    {
        _p = javax.microedition.media.Manager.createPlayer(
                    "capture://video?encoding=jpeg" +
                    "&width=1024&height=768");
    }
    catch(Exception e)
    {
        Dialog.alert(e.toString());
    }
  5. Pour contrôler un aspect précis de la prise de vue, récupérez l'objet Control approprié. Appelez la méthode realize() de l'objet Player pour accéder à l'objet Control associé. Appelez ensuite Player.getControl() pour récupérer la méthode VideoControl de l'objet Player.
    try 
    {
        _p = javax.microedition.media.Manager.createPlayer(
                    "capture://video?encoding=jpeg" +
                    "&width=1024&height=768");
        _p.realize();
        _videoControl = (VideoControl) _p.getControl("VideoControl");
    }
    catch(Exception e)
    {
        Dialog.alert(e.toString());
    }
  6. Créez un viseur dans votre application en appelant VideoControl.initDisplayMode(int mode, Object arg) pour initialiser le mode utilisé par un champ vidéo. Transmettez un paramètre pour spécifier l'interface utilisateur primitive affichant l'image. Convertissez l'objet renvoyé en objet Field. Appelez VideoControl.setDisplayFullScreen(true) afin que le viseur s'affiche en plein écran sur le terminal. Appelez VideoControl.setVisible(true) pour afficher le viseur.
    try 
    {
        _p = javax.microedition.media.Manager.createPlayer(
                    "capture://video?encoding=jpeg" +
                    "&width=1024&height=768");
        _p.realize();
        _videoControl = (VideoControl) _p.getControl("VideoControl");
        if (videoControl != null)
        {
            Field videoField = (Field) _videoControl.initDisplayMode(
                   VideoControl.USE_GUI_PRIMITIVE,
                   "net.rim.device.api.ui.Field");
            _videoControl.setDisplayFullScreen(true);
            _videoControl.setVisible(true);
        }
    }
    catch(Exception e)
    {
        Dialog.alert(e.toString());
    }
  7. Appelez Player.start() pour faire passer le lecteur à l'état STARTED.
    try 
    {
        _p = javax.microedition.media.Manager.createPlayer("capture://video?encoding=jpeg&width=1024&height=768");
        _p.realize();
        _videoControl = (VideoControl) _p.getControl("VideoControl");
        if (videoControl != null)
        {
            Field videoField = (Field) _videoControl.initDisplayMode(
                   VideoControl.USE_GUI_PRIMITIVE,
                   "net.rim.device.api.ui.Field");
            _videoControl.setDisplayFullScreen(true);
            _videoControl.setVisible(true);
            _p.start();
        }
    }
    catch(Exception e)
    {
        Dialog.alert(e.toString());
    }
  8. Pour activer la mise au point automatique de l'appareil photo, appelez Player.getContol() pour récupérer l'interface EnhancedFocusControl de l'objet Player. Appelez EnhancedFocusControl.startAutoFocus(). Si le terminal BlackBerry ne prend pas en charge la mise au point automatique, startAutoFocus() reste sans effet.
    try 
    {
        _p = javax.microedition.media.Manager.createPlayer("capture://video?encoding=jpeg&width=1024&height=768");
        _p.realize();
        _videoControl = (VideoControl) _p.getControl("VideoControl");
        if (videoControl != null)
        {
            Field videoField = (Field) _videoControl.initDisplayMode(
                   VideoControl.USE_GUI_PRIMITIVE,
                   "net.rim.device.api.ui.Field");
            _videoControl.setDisplayFullScreen(true);
            _videoControl.setVisible(true);
            _p.start();
            EnhancedFocusControl efc = (EnhancedFocusControl)p.getControl(
                   "net.rim.device.api.amms.control.camera.EnhancedFocusControl");
            if(efc != null)
            {
                efc.startAutoFocus();
            }
        }    
    }
    catch(Exception e)
    {
        Dialog.alert(e.toString());
    }
  9. Vérifiez que videoField n'est pas null et appelez add() pour ajouter le viseur à l'écran.
    try 
    {
        _p = javax.microedition.media.Manager.createPlayer("capture://video?encoding=jpeg&width=1024&height=768");
        _p.realize();
        _videoControl = (VideoControl) _p.getControl("VideoControl");
        if (videoControl != null)
        {
            Field videoField = (Field) _videoControl.initDisplayMode(
                   VideoControl.USE_GUI_PRIMITIVE,
                   "net.rim.device.api.ui.Field");
            _videoControl.setDisplayFullScreen(true);
            _videoControl.setVisible(true);
            _p.start();
            EnhancedFocusControl efc = (EnhancedFocusControl)p.getControl(
                   "net.rim.device.api.amms.control.camera.EnhancedFocusControl");
            efc.startAutoFocus();
            if(videoField != null)
            {
                add(videoField);
            }
        }
    }
    catch(Exception e)
    {
        Dialog.alert(e.toString());
    }
  10. Dans ImageCaptureDemoScreen, appelez net.rim.device.api.ui.Screen.invokeAction(). Avec ce déploiement, la photo est prise lorsque l'utilisateur clique sur le pavé tactile, la trackball ou l'écran tactile. Renvoyez un objet boolean indiquant si l'action a été effectuée.
    protected boolean invokeAction(int action)
    {
        boolean handled = super.invokeAction(action); 
        if(!handled)
        {
            if(action == ACTION_INVOKE)
            {                         
            }
        }  
        return handled;                
    }
  11. Avec l'instruction if(action == ACTION_INVOKE), dans un bloc try/catch, appelez VideoControl.getSnapshot() pour prendre la photo, en transmettant null pour utiliser le paramètre de codage indiqué à l'étape 4. L'image est renvoyée sous forme de tableau d'octets byte.
    protected boolean invokeAction(int action)
    {
        boolean handled = super.invokeAction(action); 
        if(!handled)
        {
            if(action == ACTION_INVOKE)
            {   
                try
                {                      
                    byte[] rawImage = _videoControl.getSnapshot(null);        
                }
                catch(Exception e)
                {
                    Dialog.alert(e.toString());
                }
            }
        }           
        return handled;                
    }

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.