Affichage des articles dont le libellé est Photo. Afficher tous les articles
Affichage des articles dont le libellé est Photo. Afficher tous les articles

dimanche 15 mai 2011

Un tour de Norvège avec Hurtigruten

Retour d'expérience avec l'express côtier

De retour de voyage avec Hurtigruten en norvège, voici un retour d'expérience qui pourra en aider quelques un à finaliser les détails de leur croisière avec Hurtigruten.

Le voyage en question s'est déroulé pendant les vacances de pâques 2011, à cheval sur la fin avril et le début mai. La croisière était une croisière sud nord (Bergen - Kirkenes). La température permettait de tenir sur le pont du bateau par beau temps et au soleil jusqu'à Tromso. C'est à partir de Tromso d'ailleurs que la neige a commencé s'étendre jusqu'à la mer.

Notre voyage était un voyage à la carte et nous avons pris trois bateaux. L'un de Bergen à Alesund. Le suivant de Alesund à Svolsvaer aux Lofoten. Et le dernier, de Harstad aux Lofoten jusqu'à Kirkenes. Cela nous a permis de passer une nuit dans le Geiranger fjord, et trois nuits aux Lofoten.

Concernant l'escale à Geiranger, que nous avons préféré à la traversé du fjord à bord du bateau, elle permet d'avoir une vue du fjord par le haut. Avec plus de temps, nous aurions sans doute aimé le parcourir a flots. Nous avons passé la nuité en cabane au Geirangerfjorden Feriesenter, très agréable et au pied du fjord. Attention toutefois, à cette époque, tout les commerces ou presque étaient fermés à l'exception d'une supérette en semaine et d'un bar... dépaysement assuré. A cette époque, la route des trolls (Trollstigen) était fermée, dommage car nous avions choisi de faire une escale en partie pour cela.

Mettre pied à terre aux Lofoten quelques jours en milieu de croisière est tout simplement indispensable. Il faut compter deux journées complètes pour faire le tour des lieux les plus intéressants : village de Reine, village de Nusfjord, port de Svolsvaer, plages, mur des Lofoten, ... En été, quelques jours de plus devraient permettre de profiter de belles randonnées à l'intérieur des terres et sur les hauteurs. A partir de fin avril, il ne fait déjà plus nuit noir aux Lofoten.

En ce qui concerne les escales et excursions Hurtigruten, nous n'en avons fait aucune. Toutes les grandes villes se font sans problème à pied : Alesund, Trondheim, Tromso, Bodo, ... A chaque fois les points d'intérêt sont accessibles à pied et il y a de quoi trouver facilement à manger, fast food, à emporter ou restaurants. Les fast food et la vente à emporter permettent de se restaurer une fois retourné au bateau sans dépenser le prix (excessif) des repas à bord. A la vue de la carte et des menus des différents repas, seul le buffet du dîner du cap nord vaut le coup : crabe royal, langouste, poissons fumées, ... Pour les autres, cela ne vaut pas le coup de les réserver à l'avance pour les raisons suivantes :
  1. Leur prix est exorbitant
  2. Il est possible de se présenter sans réserver. Le premier soir, voyez s'il y a plusieurs services de prévus pour le dîner. Si c'est le cas, il y aura de la place pour vous le soir au dernier service. Le midi, en self service, il n'y a pas de place réservée, vous êtes donc quasiment sur de trouver un place à un moment ou un autre.
  3. Il existe un snack dans chaque bateau. C'est un peu le fast food du bateau. Beaucoup moins cher que le restaurant et proposant des pizza, des steak frites, des sandwich bien garnis... Ce n'est pas une alternative vantée par Hurtigruten (car moins bénéfique pour eux), mais c'est tellement plus souple et surtout beaucoup moins cher.
En quelques mots, nous regrettons peut-être juste de ne pas avoir vu le Geiranger fjord depuis la mer ni la Trollstigen depuis la route. Si c'était à refaire, nous partirions un peu plus tard afin que cette dernière soit ouverte. Nous resterions une journée supplémentaire afin de faire la traversée du fjord à bord du bateau. 

L'intérêt du nord du pays (Tromso et plus haut) par rapport au reste (Tromso et plus bas) en cette saison est discutable. Les dernières villes du trajet étaient tristes, grises et sans intérêts. L'excursion au cap nord ne justifie pas à elle seule de faire le dernier tronçon. Les alpes de Lyngen, immédiatement au nord de Tromso sont en revanche magnifiques.

Quelques photos...

Pour terminer, quelques photos de la norvège pendant les vacances de pâques.
De Bergen à Kirkenes avec Hurtigruten en passant par les Lofoten et le Geiranger Fjord.

IMG_0130.jpg
Sur les bateaux postes norvégiens

P1040147.jpg
Les maisons colorés, que l'on retrouve de Bergen à Kirkenes

IMG_0068.jpg
Alesund, posée sur la mer et porte d'entrée du Geirangerfjord

IMG_0050.jpg
Le village de Geiranger, au fond du Geirangerfjord

P1040232.jpg
L'express côtier, au fond du Geirangerfjord

IMG_0062.jpg
Le Geirangerfjord

IMG_0107.jpg
Trondheim, ses canaux...

IMG_0096-2.jpg
... et sa cathédrale

IMG_0094.jpg
bis

IMG_0137.jpg
Un phare, peu après avoir quitté Trondheim

P1040533.jpg
Aux Lofoten, les routes sont parfois en terre...

IMG_0342.jpg
...et débouchent sur des villages de pêcheurs

IMG_0269-2.jpg
Les mouettes et goélands sont chez eux sur terre, sur mer et dans les airs

IMG_0400.jpg
Tromso, dernière grande ville avant le nord

IMG_0402-Modifier.jpg
Les Alpes de Lyngen, au nord de Tromso

IMG_0425-Modifier.jpg
MS Nordstjernen, le plus vieux bateau de la flotte (1956)

IMG_0482.jpg
La pêche fait vivre une partie de la population, et les oiseaux

IMG_0423-2.jpg
MS Richard With en direction du sud

dimanche 7 novembre 2010

New York city Trip

Quelques photos de notre voyage à New York.
Un temps parfait, une saison extra (vacances de la toussaint) pour voir les arbres de central park sous toutes les couleurs et ne pas avoir ni trop chaud ni trop froid...

Central park

Statue of liberty

Taxi à Time Square

Time Square

Flatiron Building

China Town (traitement croisé)

dimanche 3 octobre 2010

Prendre une photo avec l'API Camera Android

Dans ce tutorial, nous allons voir comment utiliser l'API Android pour prendre des photos avec le téléphone. Pour que cela soit possible, il faut déclarer dans le manifest de l'application la permission suivante :
<uses-permission android:name="android.permission.CAMERA" />
Afin de s'assurer que l'application soit utilisable uniquement par les téléphones disposant d'un appareil photo numérique (APN), il suffit d'ajouter la ligne suivante dans le manifest :
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
La seconde permet de s'assurer que l'appareil photo dispose d'un auto focus.

Pour utiliser la camera Android, il faut une SurfaceView afin d'afficher en temps réel la preview de la camera et un bouton, pour indiquer à quel moment la photo doit être prise. L'API permet de récupérer différentes données :
Vous trouverez ci-dessous le code d'une SurfaceView permettant la prise de photo au moyen de l'API Camera Android :
import java.io.IOException;
import java.util.List;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * 
 * Android Camera API archetype
 * 
 * Under GPL v3 : http://www.gnu.org/licenses/gpl-3.0.html
 * 
 * @author antoine vianey
 *
 */
public final class CameraLivePreview extends SurfaceView 
        implements SurfaceHolder.Callback {
    
    private SurfaceHolder holder;
    private Camera camera;

    /**
     * Retrieve raw picture data after shooting
     */
    private Camera.PictureCallback rawCallback = 
            new Camera.PictureCallback() {
        public void onPictureTaken(byte[] data, Camera c) {
            // work with raw data
            // ...
        }
    };
    
    /**
     * Retrieve jpeg compress data after shooting
     */
    private Camera.PictureCallback jpegCallback = 
            new Camera.PictureCallback() {
        public void onPictureTaken(byte[] data, Camera c) {
            // start the camera preview
            camera.startPreview();
            // work with the jpeg data
            // ...
        }
    };
    
    /**
     * Retrieve frame data for each frame
     */
    private Camera.PreviewCallback frameCallback = 
            new Camera.PreviewCallback() {
        public void onPreviewFrame(byte[] data, Camera camera) {
            // work with the frame data
            // ...
        }
    };
    
    /**
     * Retrieve information about shutter
     */
    private Camera.ShutterCallback shutterCallback = 
            new Camera.ShutterCallback() {
        public void onShutter() {
            // handle shutter done
            // ...
        }
    };
    
    /**
     * Ensure it is supported by adding 
     * android.hardware.camera.autofocus feature
     * to the application manifest
     */
    private Camera.AutoFocusCallback autoFocusCallback = 
            new Camera.AutoFocusCallback() {
        public void onAutoFocus(boolean success, Camera camera) {
            // handle focus done
            // you can choose to take a picture
            // after auto focus is completed
            camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
    };

    public CameraLivePreview(Context context) {
        super(context);
        init();
    }

    public CameraLivePreview(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CameraLivePreview(Context context, AttributeSet attrs, 
            int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    
    private void init() {
        holder = getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }
    
    public void surfaceCreated(SurfaceHolder holder) {
        // surface created
        // we can tell the camera to render
        // into the surface
        // but it's not ready to preview yet
        camera = Camera.open();
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException exception) {
            camera.release();
            camera = null;
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        // surface destroyed
        // we must tell the camera to stop it preview
        camera.stopPreview();
        camera.release();
        camera = null;
    }

    public void surfaceChanged(SurfaceHolder holder, 
            int format, int w, int h) {
        // we get the surface dimensions
        // we can configure the preview
        Camera.Parameters parameters = camera.getParameters();

        List<Size> sizes = parameters.getSupportedPreviewSizes();
        Size optimalSize = getOptimalPreviewSize(sizes, w, h);
        parameters.setPreviewSize(optimalSize.width, optimalSize.height);

        camera.setParameters(parameters);
        
        // let render
        camera.startPreview();
        camera.setPreviewCallback(frameCallback);
    }

    private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
        
        // requirement
        final double ASPECT_TOLERANCE = 0.05;
        
        double targetRatio = (double) w / h;
        if (sizes == null) {
            return null;
        }

        Size optimalSize = null;
        double minDiff = Double.MAX_VALUE;

        int targetHeight = h;

        // find a size that match aspect ratio and size
        for (Size size : sizes) {
            double ratio = (double) size.width / size.height;
            if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
                continue;
            if (Math.abs(size.height - targetHeight) < minDiff) {
                optimalSize = size;
                minDiff = Math.abs(size.height - targetHeight);
            }
        }

        // it's not possible
        // ignore the requirement
        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Size size : sizes) {
                if (Math.abs(size.height - targetHeight) < minDiff) {
                    optimalSize = size;
                    minDiff = Math.abs(size.height - targetHeight);
                }
            }
        }
        
        return optimalSize;
    }

    public void takePhoto() {
        // take a photo :
        // 1 - auto focus
        // 2 - take the picture in the auto focus callback
        camera.autoFocus(autoFocusCallback);
    }

}
N'hésitez pas à partager vos création utilisant l'API Camera.
Fork me on GitHub