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

JavaFX Discussion :

Agrandissement d'image -> flou, supprimer l'interpolation


Sujet :

JavaFX

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Par défaut Agrandissement d'image -> flou, supprimer l'interpolation
    Bonjour,
    Je ne parviens pas à résoudre mon problème, malgré avoir écumé google, des forums anglais et la doc java
    Voilà je commence à développer un jeu 2D en javaFX, style retro donc avec des beaux pixels bien visibles
    Malheureusement je ne parviens pas à obtenir des graphismes corrects du fait que les images deviennent floues dès qu'on les agrandies
    L'effet est juste horrible sur mes textures qui sont toutes floues

    ma texture fait 32 par 32 pixels, elle devra faire en jeu 113*113 pixels sur écran de 1930*1080 pxl en fenêtré maximisé, et j'ai rajouté l'image en 500*500 pour que vous voyez bien:

    Nom : Capture.PNG
Affichages : 671
Taille : 177,4 Ko

    Je sais que ce problème est dû à "l'interpolation" (comme sur GIMP ou l'effet est le même), et j'aimerais savoir comment désactiver cette interpolation
    J'utilise les objets Image et ImageView, mais attention je tient à ce que pour le redimensionnement la longueur et largeur de l'image soit bindé à certaines propriétés (j'ai en fait tout un code qui s'arrange pour que l'interface garde un ratio de 3/2, qq soit le format de l'écran ou de la fenetre)
    J'ai bien tenté d'utiliser la commande setSmooth() de l'ImageView mais ça change strictement rien, et pareil si je construit l'Image comme ceci : ("image.png",32,32,boolean preserveRatio, boolean smooth), le dernier boolean n'a aucun effet qq soit sa valeur

    J'ai cependant la solution de secours : mettre à la place de "32,32" des valeurs plus grandes mais ça augmente fortement le temps d'exécution (un tout petit peu moins que si je charge directement mon image.jpg avec une plus grande résolution)
    Mais là où ça coince c'est que la valeur à partir de laquelle l'image est parfaitement nette est très très élevée ! qui plus est elle est hyper dur à trouver: je ne trouve aucune corrélation entre la valeur à mettre et les dimensions de l'écran/ la fenetre .
    Pire, selon cette valeur l'image est pas toujours pareil, en faisant défiler les différentes possibilités de valeur, j'ai remarqué que l'image vibre !
    Alors de quelle taille doit je faire mes images ? ou quelle valeur mettre dans le constructeur de Image ? Est ce que je n'ai pas intérêt à la faire varier selon la résolution de l'écran du joueur ? Dans ce cas, quelle résolution maximale doit je prendre, seulement fullHD ou y a t il des écrans plus grand?

    bref je suis perdu

    merci d'avance de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    J'aimerai bien savoir aussi, ça fait très TRES longtemps (depuis JavaFX 1.0 en fait) que j'ai demandé sur le Jira un moyen de désactiver cette interpolation comme Java2D nous permet de le faire. En attendant il va falloir passer par une copie + redimensionnent de l'image (voir méthode 1 et 4 sur cette réponse sur StackOverflow - code source ici)

    Note : une question similaire a été également postée sur StackOverflow ici et .
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Par défaut
    Merci de ta réponse, j'ai déjà lu tous ces sites
    Je ne peux malheureusement pas me permettre d'utiliser cette méthode puisque je tien à ce que tout soit bindé à d'autres propriétés
    Alors si visiblement il n'y a pas de commande simple pour régler ça, comment fonctionne les deux valeurs à mettre dans le constructeur de Image? est ce que l'on peut calculer la valeur à partir de laquelle l'image est nette, en fonction de la résolution de la fenetre ?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    En toute logique, pour un agrandissement, l'image devrait être nette si on utilise un facteur d'agrandissement entier. Cependant il faudrait tester en pratique pour voir si cette foutu interpolation s'applique ou non. Pour une réduction c'est plus problématique.

    Néanmoins, tu prends peut-être le problème par le mauvais bout. Tu veux binder les valeurs de résolution et de facteur d'agrandissement, soit... mais ça ne t’empêche pas de pouvoir utiliser une fabrique a tuile / sprites qui te créera (suivant les méthodes reportées par ce post) les bonnes images non interpolées et reconstruira l'affichage en cas de changement de résolution. Il me semble donc qu'une meilleure planification de l'architecture du moteur d'affichage (dont on a rien vu pour le moment) pourrait permettre de contourner ce soucis technique (au prix du rechargement de toutes les image affichées lorsqu'on change de résolution).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 20
    Par défaut
    Re

    J'ai pas super envie de faire un truc trop compliqué, pour pas alourdir mon code
    Finalement j'ai opté pour cette solution:
    charger les images(les deux valeurs dans le constructeur) avec la taille qu'elles feront une fois placée et en plein écran(donc j'ai une variable qq part qui connait la longueur de l'écran utilisé), ça donne une image assez nette (presque complètement) et il n'y a pas de problème pour le rétrécissement
    Après je vais ajouter un paramétrage dans l'appli pour faire varier le % de résolution, si on a un bon PC on pourras l'élever pour encore plus de netteté, et réciproquement (notamment si qq à un PC moyen et joue sur un écran de TV :S)
    Reste à savoir si sur le long terme le jeu ne ramera pas... Pour l'instant j'ai bien optimisé mes menus, ils sont tous chargés au début du programme et je n'ai pas de latence visible pour passer de l'un à l'autre

    Merci quand même pour ton aide

Discussions similaires

  1. Composant anti-aliasing pour agrandissement d'image
    Par boon31 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/11/2007, 16h31
  2. Agrandissement d'image en javascript
    Par bellzigor dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/01/2007, 14h50
  3. [GD] [PHP 4.3] Agrandissement d'image - lissage pixels
    Par Djakisback dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 10/01/2007, 20h50
  4. Réponses: 3
    Dernier message: 17/09/2006, 00h33
  5. AMR et agrandissement d'images
    Par progfou dans le forum Traitement d'images
    Réponses: 23
    Dernier message: 17/05/2006, 22h56

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