Graphics.drawImage () en Java est extrêmement lent sur certains ordinateurs et beaucoup plus rapide sur d'autres
Je vais avoir un problème étrange, essentiellement en Java Graphiques.drawImage() est extrêmement lent sur certains ordinateurs et plus rapidement sur les autres. Ce n'est pas lié à l'alimentation ordinateurs, certains plus faibles des ordinateurs de fonctionner correctement alors que certains les plus forts semblent étouffer jusqu'à la drawImage appel.
Il peut ou peut ne pas être liée à la largeur et la hauteur, j'ai une très, très grande largeur et la hauteur définie (quelque chose comme 5000 par 2500). Je ne pense pas que c'est de la question, sauf comme je l'ai dit, il fonctionne en temps réel de la vitesse sur certains ordinateurs et plus lent sur les autres, et ne semble pas être lié à des ordinateurs de puissance relative.
Les deux ordinateurs ont la même version de Java, à la fois utiliser Vista. On a un 1.83 ghz Core 2 Duo avec 1go de RAM et la carte graphique embarquée (tout fonctionne très bien), l'autre a un 2.53 ghz core 2 duo avec un 9600GS (les derniers drivers nVidia) et de 4 go de RAM et c'est littéralement souffle sur la drawImage appel.
Des idées?
edit: ok c'est vraiment bizarre, je dessine l'image d'une fenêtre dans Swing, maintenant, quand je redimensionner la fenêtre et de le rendre vraiment petit l'image se réduit trop et elle devient petite. Soudain, tout se passe bien, quand je l'échelle de retour jusqu'à la taille qu'il était avant, c'est toujours en cours d'exécution en douceur!
Il a aussi des moniteurs multiples questions, si je dois la redimensionner astuce pour le faire fonctionner plus vite sur un écran, puis faites défiler jusqu'à un autre moniteur lorsque plus de la moitié de la fenêtre est dans le nouveau moniteur il commence à naviguer de nouveau. J'ai pour redimensionner la fenêtre à petit, puis de revenir à sa taille d'origine pour reprendre de la vitesse.
Si je ne le redimensionner truc sur un moniteur, sur les autres, bien sûr, chugs, mais si je retourne en arrière à l'original de l'écran sur lequel j'ai fait la redimensionner truc ça marche à 100%
Si j'ai deux swing fenêtres ouvertes (l'affichage de la même image) ils ont tous deux courir lentement, mais si je ne le redimensionner truc sur une fenêtre qu'ils commencer à courir en douceur (mais ce n'est pas toujours le cas).
*quand je dis redimensionner la fenêtre, je veux dire la rendre aussi petite que possible au point de l'image ne peut pas être vu.
Cela pourrait-il être un bug de Java peut-être?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Les performances d'écriture d'une image à l'écran est très affecté par le format dans lequel l'image est stockée. Si le format est le même que l'écran de la mémoire veut alors il peut être très rapide; si elle n'est pas alors une conversion doit être effectuée, parfois, pixel par pixel, ce qui est très lent.
Si vous avez aucun contrôle sur la façon dont l'image est stockée, vous devez les stocker dans un format que l'écran est à la recherche pour. Voici un exemple de code:
Si vous allez dessiner l'image de nombreuses fois, il peut être utile de le convertir à un format compatible même si c'était dans un autre format.
Dessin, une image sera également plus lente si vous sont en train de transformer ce que vous dessinez, qui le "redimensionnement" une partie de votre description me fait penser que vous pourriez être. Encore une fois, ne le redimensionner une fois (lorsque la fenêtre est redimensionnée) et le cache de la redimensionnées et compatible image de sorte qu'elle peut être redessiné rapidement.
Si vous utilisez Java de sun essayer certaines des propriétés système suivantes, soit en tant que paramètres de ligne de commande ou les premières lignes dans les principales
plus de drapeaux peuvent être consultés à cette page
Regarder
sun.java2d.trace
qui peut vous permettre de déterminer la source de la moins-que-souhaitable de performances graphiques.Il y a plusieurs choses qui pourraient influencer la performance ici:
EDIT:
Avoir un regard sur les édité question, j'aimerais vous proposons de vérifier si le 9600GS système a les derniers drivers NVIDIA installés. J'ai récemment installé un pilote pour une carte graphique intégrée Intel de la carte qui a remplacé le pilote générique de Windows et a fait le déplacement de windows, regarder des vidéos, la navigation, etc. beaucoup plus rapide.
Toutes les autres caractéristiques semblent bonnes. Peut-être que Java ne détecte pas le 9600GS et n'utilise pas l'accélération matérielle, mais je doute que cela.
Également vérifier le système d'exploitation de configuration. Sur Windows, vous pouvez désactiver l'accélération matérielle pour des fins de débogage.
Bien sûr, la meilleure façon de gérer cela pourrait être de modifier votre code - redimensionner l'image ou de la découper en morceaux comme DNS proposé. Vous ne serez jamais en mesure de voir l'ensemble de l'image sur l'écran.
Comment jugez-vous les ordinateurs power? Un 50x25 K 32 bits de l'image prend plus de 4,5 GO de RAM pour tenir dans la mémoire (50000 * 25000 * 4 octets). Si un ordinateur a plus de RAM qu'un autre, que peut faire une énorme différence dans la vitesse, car il n'aura pas à changer de disque, comme souvent. Vous devriez envisager de l'accaparement des paragraphes de l'image et de travailler avec ceux qui, au lieu de l'ensemble de la chose.
Edit: Êtes-vous à l'aide de la dernière version de Java & pilotes graphiques? Si votre image n'est 5Kx2.5K, la seule chose que je peux penser, c'est que c'est de le faire sans l'accélération matérielle.
Vérifier les paramètres de l'écran. Mon pari est que la profondeur de pixels est différent sur les deux systèmes, et que la lenteur de la on a une étrange profondeur de pixels connexes à l'image de l'objet que vous essayez d'affichage.
Depuis Java utilise OpenGL pour faire du dessin 2Dles performances de votre application sera affectée par les performances OpenGL de la puce graphique de l'ordinateur. Prise en charge d'OpenGL est en diminution dans l'industrie du 3D, ce qui signifie que (ironiquement) nouvelles puces peut être plus lent à de rendu OpenGL que les plus anciens, non seulement à cause du matériel, mais aussi des pilotes.
Avez-vous essayé Plein Écran Mode Exclusif?
Ce qui pourrait aider:
http://download.oracle.com/javase/tutorial/extra/fullscreen/index.html