graph 2d en java (soucis avec extends de java.awt.Image)

graph 2d en java (soucis avec extends de java.awt.Image) - Java - Programmation

Marsh Posté le 25-03-2003 à 11:14:19    

bon, dans le cadre de la cause et afin d'atteindre des resultats tant voulu qu'escompter, je dois pouvoir etre en mesure de dessiner rapidement des formes geometriques a l'ecran.
 
Le probleme est que je suis limite a la JVM 1.1.8 (ou anterieur), et que la classe Graphics disponible se chargeant d'habitude de ce genre de sport ne correspond pas a mes besoins par manque de fonctionnalite.  
 
Ma question donc : comment faire du graph 2d rapide ? Pour le moment je plotte mes pixels un a un via BufferedImage::setPixel mais bon, un appel de fonction par pixel c'est pas le mieux, quand meme (la machine cible n'etant pas exactement un monstre de puissance, faire l'economie de l'appel de fonction par pixel ne me parait pas etre inutile) .
 
Des idees / tactiques ?
 
thks


Message édité par chrisbk le 30-04-2003 à 13:36:18
Reply

Marsh Posté le 25-03-2003 à 11:14:19   

Reply

Marsh Posté le 25-03-2003 à 11:28:24    

En fait j'ai du mal a comprendre pkoi tu veux(peux) pas utiliser Graphics ?


Message édité par bobuse le 25-03-2003 à 11:28:43

---------------
get amaroK plugin
Reply

Marsh Posté le 25-03-2003 à 11:32:14    

bobuse a écrit :

En j'ai du mal a comprendre pkoi tu veux pas utiliser Graphics ?


 
ca n'est pas que je ne veux pas, c'est que je ne peux pas. Le seul Graphics dont je dispose est celui de la JVM 1.1.8, qui est tres limite en terme de fonctionnalite (rien a voir avec celui du Graphics2D. Mais vu que ce dernier n'est dispo qu'a partir de la JVM 1.2 et que je dois rester a la 1.1.8, ben tant pis).
 
Par exemple le graphics ne te permet que de remplir des formes avec une couleur unie tandis que moi j'ai besoin de degrade, alpha blending et meme peut etre de l'anti aliasing => Graphics KO  
 
(et par ailleurs, je trouve qu'il donne de sales resultats)
 
edit : fautes + desole pour le manque d'accent mais sur clavier allemand c vraiment la misere...


Message édité par chrisbk le 25-03-2003 à 11:33:05
Reply

Marsh Posté le 25-03-2003 à 11:38:01    

chrisbk a écrit :


 
ca n'est pas que je ne veux pas, c'est que je ne peux pas. Le seul Graphics dont je dispose est celui de la JVM 1.1.8, qui est tres limite en terme de fonctionnalite (rien a voir avec celui du Graphics2D. Mais vu que ce dernier n'est dispo qu'a partir de la JVM 1.2 et que je dois rester a la 1.1.8, ben tant pis).
 
Par exemple le graphics ne te permet que de remplir des formes avec une couleur unie tandis que moi j'ai besoin de degrade, alpha blending et meme peut etre de l'anti aliasing => Graphics KO  
 
(et par ailleurs, je trouve qu'il donne de sales resultats)
 
edit : fautes + desole pour le manque d'accent mais sur clavier allemand c vraiment la misere...


Ha ouais ... et ya pas moyen de récupérer un jar d'un ersatz (et hop du deutsch) de Graphics2D ? remarques c'est peut-etre ce que tu cherches :D


---------------
get amaroK plugin
Reply

Marsh Posté le 25-03-2003 à 11:43:08    

je viens de me rapeller de la lib openPTC de ma folle jeunesse en 2d, elle avait un port java, vais voir ca de plus pres [:meganne]

Reply

Marsh Posté le 30-04-2003 à 12:38:13    

grml, qqun a deja derivé sa propre classe de java.awt.Image ?

Reply

Marsh Posté le 30-04-2003 à 13:35:47    

je m'explique :
 
pour le moment je trace dans un tableau de int[]. bon. Pour l'affichagem je recopie ce tableau dans un Image, puis je balance a l'ecran via un Graphics.drawImage(..)
le truc, c que la recopie dans Image prends environ 350ms, soit bpc trop. Me suis donc dit, petit malin, plutot que de recopier dans un Image je me fais ma propre classe Image et j'envoie celle ci au graphics.  
Vala donc le resultat :
 
 

Code :
  1. class TestImage extends java.awt.Image
  2.     {
  3.         public int getWidth(ImageObserver observer)
  4.         {
  5.             System.out.println("GetWidth" );
  6.             if (observer!=null)
  7.                 System.out.println("Observer present" );
  8.             return 10;
  9.         }
  10.        
  11.         public int getHeight(ImageObserver observer)
  12.         {
  13.             System.out.println("GetHeight" );
  14.             if (observer!=null)
  15.                 System.out.println("Observer present" );
  16.            
  17.             return 10;
  18.         }
  19.        
  20.         public ImageProducer getSource()
  21.         {
  22.             System.out.println("GetSource" );
  23.             getHeight(null);
  24.             return null;
  25.         }
  26.        
  27.         public Graphics getGraphics()
  28.         {
  29.             System.out.println("GetGraphics" );
  30.             return null;
  31.         }
  32.        
  33.         public Object getProperty(String name, ImageObserver observer)
  34.         {
  35.             System.out.println("GetProperty" );
  36.             return null;
  37.         }
  38.        
  39.        
  40.         public Image getScaledInstance(int width,int height,int hints)
  41.         {
  42.             System.out.println("GetScaledInstance" );
  43.             return null;
  44.         }
  45.        
  46.         public void flush()
  47.         {
  48.             System.out.println("Flush" );
  49.         }
  50.        
  51.         public String toString()
  52.         {
  53.             System.out.println("toString" );
  54.             return "toto";
  55.         }
  56.        
  57.          public boolean equals(Object obj)
  58.          {
  59.              System.out.println("equals" );
  60.              return super.equals(obj);
  61.          }
  62.     }


 
(le but etant pour le moment de voir quelles sont les fonctions que Graphics appelent lors du drawImage(...)
 
A l'exec, je vois que seules les fonctions getHeight/getWidth sont appelees, et apres drawImage retourne en renvoyant false. Ca me fait les pieds. La javadoc me dit a ce propos :
 

Citation :

If the image has not yet been completely loaded, then drawImage returns false. As more of the image becomes available, the process that draws the image notifies the specified image observer.


 
ce qui me fait aussi les pieds. Bref, qu'est ce qu'il se passe ? qu'est ce qu'ils veulent dire par "completely loaded" ? Pkoi ma fausse image n'est pas consideree comme "completely loaded" ?
 

Reply

Marsh Posté le 30-04-2003 à 16:10:53    

si je me trompe pas, Image est une classe abstraite, donc y a surement mille choses a implementer pour pouvoir afficher koi ke ce soit :hello:

Reply

Marsh Posté le 30-04-2003 à 16:12:00    

souk a écrit :

si je me trompe pas, Image est une classe abstraite, donc y a surement mille choses a implementer pour pouvoir afficher koi ke ce soit :hello:  


 
beh non justement, j'ai repris toute les methodes donnees dans la javadoc (?). Et vu que je peux instancier ma classe c donc que je n'en ait oublié aucune (abstract du moins)
 
(thks pour le up quand meme :D)

Reply

Marsh Posté le 30-04-2003 à 19:26:29    

ah vi... j'ai encore ete stupide sur skou la :D
sorry  :lol:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed