• [^] # Re: bon ben c' est simple....

    Posté par (site web personnel) . En réponse au journal G'MIC : Un nouvel outil libre de manipulation d'images. Évalué à 5.

    Je dirais juste que c'est quand même bizarre, car je recois de plus en plus de contributions pour CImg qui ne sont pas triviales du tout, donc c'est que ça doit pas être si illisible que çà. Que le code te plaise pas, soit, mais en aucun cas ton avis perso est un critère de qualité objectif de code, excuse moi de te le dire.
    Boost, je connais. C'est peut-être du grand art de conception C++, mais c'est pas super sympa à *utiliser* (je parle en particulier de GIL, la bibliothèque image de Adobe incluse dans Boost). Franchement *pour l'utilisateur* qui n'est pas un pro du C++, c'est du n'importe quoi. Est-ce que les gens d'Adobe responsables de GIL ont déjà pensé que les traiteurs d'images sont pas tous des programmeurs chevronnés en C++ ? Bah non jamais, je pense, car les mecs derrière GIL ce sont des bons gros programmeurs qui se font plaisir aussi de leur côté, mais franchement...

    Quand on fait une bibliothèque, le minimum est de d'abord penser à *l'utilisateur* et de lui simplifier la tâche d'utilisation. Quand je vois çà (tiré de http://stlab.adobe.com/gil/html/giltutorial.html#ExampleSec ), je me dis que personne qui fait du traitement d'images n'a envie décrire çà pour calculer un gradient (et là ca le fait juste en 'x', c'est pour te dire :)


    template <typename SrcView, typename DstView>
    void x_gradient(const SrcView& src, const DstView& dst) {
    gil_function_requires<ImageViewConcept >();
    gil_function_requires<MutableImageViewConcept >();
    gil_function_requires<ColorSpacesCompatibleConcept<
    typename color_space_type::type,
    typename color_space_type::type> >();

    for (int y=0; y<src.height(); ++y) {
    typename SrcView::x_iterator src_it = src.row_begin(y);
    typename DstView::x_iterator dst_it = dst.row_begin(y);

    for (int x=1; x<src.width()-1; ++x)
    for (int c=0; c<num_channels::value; ++c)
    dst_it[x][c] = (src_it[x-1][c]- src_it[x+1][c])/2;
    }
    }


    Alors c'est peut-être du grand art, y a des beaux itérateurs, des beaux traits, tout ce que tu veux, mais pour l'utilisateur ça *suxx*. Je comprend qu'un traiteur d'images n'ait pas envie d'utiliser du C++ quand on voit çà. Avec CImg, tu peux écrire un gradient en 5 lignes, qui marche pour le cas général des images 3D multi-spectrales.
    Alors moi je maintiens que le code même de CImg est peut-être ardu à aborder, mais que l'utilisation de CImg, c'est que du bonheur. Boost, ca fait peut-être bander les programmeurs, mais ca fait fuir les utilisateurs.

    Je préfère la première solution pour ma part.

    David.