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

Millie Discussion :

[Suggestion] Un Zoom plus Zen


Sujet :

Millie

  1. #1
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut [Suggestion] Un Zoom plus Zen
    Tout d'abord, bravo pour la v2.0 : c'est beau !

    (d'ailleurs, je compte donner un coup de menage dans le code de "mes" plugins pour la v2.0 )

    Bon, concernant ma suggestion : peut-on faire quelque chose pour la fonction zoom:

    - un zoom de meilleur qualité (genre celui du plugin "redimensionnement texte"), car lors d'une réduction on perd des infos dans l'image, par exemple des morceaux de lignes fines
    - un zoom régulier avec la molette de la souris, pour que l'on se retrouve a 100% si on fait un zoom suivi d'un dézoom
    - un zoom par defaut a 100% si l'image tient dans la fenetre

    Voila, c'était quelques remarques en vrac.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  2. #2
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    - un zoom régulier avec la molette de la souris, pour que l'on se retrouve a 100% si on fait un zoom suivi d'un dézoom

    Je crois que je n'ai pas compris ce point là Est-ce que tu veux dire que si tu es à 100%, dézoomer puis zoomer (ou zoomer et dézoomer) avec la molette implique le retour à 100% ?
    EDIT : Ah oui, ça déconne, ce n'est pas une feature

    Pour le zoom de meilleur qualité, il faut que je vois comment optimiser ça.

    Normalement, au niveau des anciens plugins, il n'y a pas grand chose qui change. A part avec la preview, les anciens devraient toujours fonctionner.

    Je n'ai pas tout documenter car certaines parties n'ont pas des spécifications stables, mais il est possible d'ajouter son propre système de plugin, j'avais commencé à faire un plugin pour integrer les plugins ImageJ (sans avoir besoin de recompiler quoique ce soit).

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jack Sparrow Voir le message
    Je crois que je n'ai pas compris ce point là Est-ce que tu veux dire que si tu es à 100%, dézoomer puis zoomer (ou zoomer et dézoomer) avec la molette implique le retour à 100% ?
    EDIT : Ah oui, ça déconne, ce n'est pas une feature

    Pour le zoom de meilleur qualité, il faut que je vois comment optimiser ça.
    Remarque, les 2 choses sont liées. C'est parce que le zoom fait "sauter" des pixels (exemple avec cette image) que j'aimerai bien pouvoir retourner a 100% avec la molette.

    Normalement, au niveau des anciens plugins, il n'y a pas grand chose qui change. A part avec la preview, les anciens devraient toujours fonctionner.
    C'est surtout du nettoyage pour optimisation (utiliser ton "flou gaussien rapide" dans les filtres) et du cosmetique (nom/type des parametres). Peut-être aussi virer des vieux filtres inutiles (UnNoise ?) et fusionner des filtres (genre les diffusions).
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jack Sparrow Voir le message
    Normalement, au niveau des anciens plugins, il n'y a pas grand chose qui change. A part avec la preview, les anciens devraient toujours fonctionner.
    Ca fonctionne pas toujours. Mise a part que GenericPluginFilter est Deprecated, il semble que le système de notification (notifyProcessFilter) n'existe plus.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ca fonctionne pas toujours. Mise a part que GenericPluginFilter est Deprecated, il semble que le système de notification (notifyProcessFilter) n'existe plus.
    Les plugins ont effectivement été renommées :
    GenericPluginFilter => GenericAppImagePlugin
    AreaPluginFilter => AreaAppImagePlugin
    RectangularPluginFilter => RectangularAppImagePlugin

    Concernant notifyProcessFilter,
    C'est effectivement devenu notifyProgress(percent) ou notifyProgress(ProgressEvent).

    J'ai oublié que j'avais changé ça. notifyProcessFilter était à la base une erreur d'écriture, j'avais toujours voulu écrire Progress

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jack Sparrow Voir le message
    Les plugins ont effectivement été renommées :
    GenericPluginFilter => GenericAppImagePlugin
    AreaPluginFilter => AreaAppImagePlugin
    RectangularPluginFilter => RectangularAppImagePlugin

    Concernant notifyProcessFilter,
    C'est effectivement devenu notifyProgress(percent) ou notifyProgress(ProgressEvent).

    J'ai oublié que j'avais changé ça. notifyProcessFilter était à la base une erreur d'écriture, j'avais toujours voulu écrire Progress
    Ok, ca compile mieux effectivement

    J'ai modifié un filtre (bloom) pour utiliser le FastGaussianBlurPlugin. Pour l'instant je fais un appel direct des méthodes de l'instance. Je ne sais pas s'il faut passer par un Automate dans ce cas là.

    Par contre il semble que le chargement/refresh dynamique de plugin ne fonctionne pas (menu "rafraichir plugins")
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  7. #7
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Ok, ca compile mieux effectivement

    J'ai modifié un filtre (bloom) pour utiliser le FastGaussianBlurPlugin. Pour l'instant je fais un appel direct des méthodes de l'instance. Je ne sais pas s'il faut passer par un Automate dans ce cas là.

    Par contre il semble que le chargement/refresh dynamique de plugin ne fonctionne pas (menu "rafraichir plugins")
    Ce que je faisais pour les filtres souvent utilisés, je les cassais en 2 : Une partie plugin et une partie filter (BufferedImageOp) :

    Exemple pour le ContrastPlugin :

    http://subversion.developpez.com/pro...astPlugin.java
    http://subversion.developpez.com/pro...tOperator.java

    Mais il en reste probablement à couper.

    Les automates permettent surtout d'enregistrer des séquences et de les réapliquer plus tard. Cela ressemble plus aux "scripts" et à la partie "automation" de photoshop.

  8. #8
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    - un zoom régulier avec la molette de la souris, pour que l'on se retrouve a 100% si on fait un zoom suivi d'un dézoom
    Pour ça, j'ai juste remplacé ImagePanelServices#zoomService par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void zoomService(int posx, int posy, boolean more) {
    		double newZoom = panel.getImageInfo().getZoomFactor();
    		
    		if(more) {
    			newZoom*=1.25;
    		}
    		else {
    			newZoom*=0.8;
    		}
    Le zoom est un peu plus fort qu'avant par contre.
    Je ne répondrai à aucune question technique en privé

  9. #9
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par millie Voir le message
    Pour ça, j'ai juste remplacé ImagePanelServices#zoomService par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void zoomService(int posx, int posy, boolean more) {
    		double newZoom = panel.getImageInfo().getZoomFactor();
    		
    		if(more) {
    			newZoom*=1.25;
    		}
    		else {
    			newZoom*=0.8;
    		}
    Le zoom est un peu plus fort qu'avant par contre.
    pourquoi ne pas juste incrémenter/décrementer un entier, et utiliser une formule pour calculer le zoom factor ?
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  10. #10
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    pourquoi ne pas juste incrémenter/décrementer un entier, et utiliser une formule pour calculer le zoom factor ?
    Si on ne fait qu'incrémenter/décrémenter. Ca va faire un truc assez bizarre (ça dézoom très vite et ça zoome très lentement).


    En fait, on pourrait simplement faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static final double zoomFactor = 0.9;
    	
    if(more) {
    			newZoom*=1.0/zoomFactor;
    		}
    		else {
    			newZoom*=zoomFactor;
    		}
    Mais il y a des micro décalages qui interviennent dû à des problèmes d'arrondi.
    Maintenant, perso, j'en ai rien à carrer tellement c'est infime.
    Je ne répondrai à aucune question technique en privé

  11. #11
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par millie Voir le message
    Si on ne fait qu'incrémenter/décrémenter. Ca va faire un truc assez bizarre (ça dézoom très vite et ça zoome très lentement).
    Je vois pas en quoi ca serait différent d'avant ?

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int zoom = 0;
     
    void more() { zoom++; }
    void less() { zoom--; }
     
    double getZoomFactor() {
    	if (zoom>0) return Math.pow(1.25,zoom);
    	if (zoom<0) return Math.pow(0.8,-zoom);
    	return 1;
    }

    Au pire, tu peux utiliser une table de lookup pour mettre les valeurs de zoomfactor que tu veux.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #12
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Ah oui, la fatigue
    Je ne répondrai à aucune question technique en privé

  13. #13
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par millie Voir le message
    Ah oui, la fatigue
    Vivement les vacances de Noël !
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  14. #14
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    - un zoom par defaut a 100% si l'image tient dans la fenetre
    Fait (et paramétrable dans les préférences).

    Il reste le plus dur
    Je ne répondrai à aucune question technique en privé

  15. #15
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Par contre il semble que le chargement/refresh dynamique de plugin ne fonctionne pas (menu "rafraichir plugins")
    C'est corrigé. J'avais oublié une ligne de rafraîchissement
    Je ne répondrai à aucune question technique en privé

  16. #16
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    - un zoom de meilleur qualité (genre celui du plugin "redimensionnement texte"), car lors d'une réduction on perd des infos dans l'image, par exemple des morceaux de lignes fines
    Bon, j'ai rapidement regardé pour mettre ça en place.
    Avec une méthode simpliste, ça a tendance à mettre 0.2sec pour dézoomer sur une image de taille normale (1280*800).
    Une technique serait de faire un premier rendu normal, de calculer un scaled instance dans un autre thread et de remettre à jour la vue...

    Ca se fait, mais pas en 10min . Normalement, les modifications ne seront localisées que dans la classe ImagePanel, donc ça va
    Je ne répondrai à aucune question technique en privé

  17. #17
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Points : 268
    Points
    268
    Par défaut
    Pour information, voici un workaround pour le Image#getScaledInstance avec un hint SMOOTH pour avoir quelque chose de plus rapide.

    http://today.java.net/pub/a/today/20...dinstance.html

  18. #18
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jack Sparrow Voir le message
    Pour information, voici un workaround pour le Image#getScaledInstance avec un hint SMOOTH pour avoir quelque chose de plus rapide.

    http://today.java.net/pub/a/today/20...dinstance.html
    Hum, vu le code de getScaledInstance(), je ne suis pas sur que ca change quoi que ce soit par rapport a un SCALE_AREA_AVERAGING

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Image getScaledInstance(int width, int height, int hints) {
            ImageFilter filter;
            if ((hints & (SCALE_SMOOTH | SCALE_AREA_AVERAGING)) != 0) {
                filter = new AreaAveragingScaleFilter(width, height);
            } else {
                filter = new ReplicateScaleFilter(width, height);
            }
            ImageProducer prod;
            prod = new FilteredImageSource(getSource(), filter);
            return Toolkit.getDefaultToolkit().createImage(prod);
        }

    Par contre, d'après ton lien, l'interpolation bilineaire multi-step a l'air de donner des bons résultats.

    EDIT: en fait non. Le multi-step est beaucoup plus long que le AreaAveraging.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  19. #19
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    Hum, vu le code de getScaledInstance(), je ne suis pas sur que ca change quoi que ce soit par rapport a un SCALE_AREA_AVERAGING
    Je parlais effectivement du multi-step Bilinear.

    D'après leur stats sur la réduction d'image (vu que c'est bien ça qui nous intéresse), ils donnaient 5ms pour le multi step et 31 pour l'area average.

  20. #20
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jack Sparrow Voir le message
    Je parlais effectivement du multi-step Bilinear.

    D'après leur stats sur la réduction d'image (vu que c'est bien ça qui nous intéresse), ils donnaient 5ms pour le multi step et 31 pour l'area average.
    Les tests devaient être fait avec une ancienne implémentation de AreaAveragingScaleFilter car moi j'obtiens:

    Image de départ 3543x2362 -> image d'arrivée 800x600
    - SCALE_AREA_AVERAGING : 8.425003 ms
    - MultiStep VALUE_INTERPOLATION_BILINEAR : 105.69857 ms

    Je vais voir si on peut optimiser les choses pour le SCALE_AREA_AVERAGING dans notre ca, mais j'ai un doute.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/06/2014, 20h19
  2. Défilement d'images plus zoom sur image central css3
    Par tijuju dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 24/01/2013, 08h31
  3. [Google Maps] Zoom avec plus de détails
    Par Gatou dans le forum APIs Google
    Réponses: 2
    Dernier message: 19/04/2012, 10h09

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