Lire la hauteur et la largeur d'une image.

Lire la hauteur et la largeur d'une image. - Java - Programmation

Marsh Posté le 05-04-2004 à 16:04:05    

Bonjour,
 
J'utilise Java 1.3.1 (Impossible d'utiliser autre chose, pas la peine d'insister ! ! !)
 
Je cherche donc a récupérer la taille en pixel d'une image.
 
Le seul moyen que j'ai trouvé, c'est ça :
 

Image aRealImg = Toolkit.getDefaultToolkit().createImage( b );
Container cnt = new Container();
int w;
while( ( w = aRealImg.getWidth( cnt ) ) < 0 );
int h = aRealImg.getHeight( cnt ) ) < 0 );


 
Sachant que b est un byte[] dont je suis presque quazi certain (mais c'est pas la question) que c'est une image GIF, JPEG ou PNG.
 
La boucle sur getWidth(), c'est parce-qu'au premier appel, ça me retourne -1. Genre le truc il lui faut un moment avant de démarrer...
 
Bref, c'est tout ce que j'ai pu trouver pour l'instant.
Bien sûr je trouve ça cradissime, alors si une bonne âme avait un bon tuyau d'arrosage histoire de nettoyer un peu ce code, se serait surper gentil :D
 
Au fait, vous aurrez compris, le 'Container', j'en ai rien à faire. C'est juste pour getWidth() et getHeight() qui veulent un 'ImageObserver'. Je fais une appli WEB, j'ai pas d'interface graphique :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 05-04-2004 à 16:04:05   

Reply

Marsh Posté le 05-04-2004 à 16:09:00    

Code :
  1. ImageIcon i = new ImageIcon(b);
  2. i.getWidth();
  3. i.getHeight();

Reply

Marsh Posté le 05-04-2004 à 16:21:19    

Yo, merci !
Je savais bien qu'il suffisait de demander :D
 
Sauf que c'est getIconWidth() et getIconHeight(), mais bon on va pas chipoter.
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 05-04-2004 à 16:36:51    

Mara's dad a écrit :

Yo, merci !
Je savais bien qu'il suffisait de demander :D
 
Sauf que c'est getIconWidth() et getIconHeight(), mais bon on va pas chipoter.
 
 

toi tu vas avoir des surprises ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 05-04-2004 à 16:39:17    

nraynaud a écrit :

toi tu vas avoir des surprises ...


 :??:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 05-04-2004 à 16:43:36    

genre ca marchera pas sans interface graphique ?

Reply

Marsh Posté le 05-04-2004 à 16:49:30    

lorill a écrit :

genre ca marchera pas sans interface graphique ?


Heu, là ça marche très bien sur mon serveur tomcat 4.1...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 05-04-2004 à 17:03:55    

Mara's dad a écrit :


Heu, là ça marche très bien sur mon serveur tomcat 4.1...


je sais pas si c'est le cas pour ImageIcon, mais sous unix, quand X n'est pas installé, certaines classes d'awt renvoient en erreur.

Reply

Marsh Posté le 05-04-2004 à 17:11:32    

lorill a écrit :

genre ca marchera pas sans interface graphique ?

je pense plutôt qu'il risque d'avoir la taille de l'icone d'attente de chargement s'il le fait trop tôt ...


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 05-04-2004 à 17:20:16    

ah, parce que le constructeur d'ImageIcon rend la main avant le chargement ?? comment ils peuvent renvoyer une exception si l'image est foireuse alors ?

Reply

Marsh Posté le 05-04-2004 à 17:20:16   

Reply

Marsh Posté le 05-04-2004 à 17:29:52    

lorill a écrit :


je sais pas si c'est le cas pour ImageIcon, mais sous unix, quand X n'est pas installé, certaines classes d'awt renvoient en erreur.

-Djava.awt.headless=true -Dsun.java2d.fontpath=/usr/java1.4.1/jre/lib/fonts
 
 
(bon d'un autre coté le headless c'est à partir d'1.4 ...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 05-04-2004 à 18:10:49    

Bon, les Experts, z'êtes bien gentil, mais moi je fais comment alors :??:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 06-04-2004 à 00:12:02    

lorill a écrit :


je sais pas si c'est le cas pour ImageIcon, mais sous unix, quand X n'est pas installé, certaines classes d'awt renvoient en erreur.


je confirme ... et c'est bien chiant ...
 
en jdk1.4 y a plus ce problème quand on se sert de java.imageio

Reply

Marsh Posté le 06-04-2004 à 00:13:57    

Mara's dad a écrit :

Bon, les Experts, z'êtes bien gentil, mais moi je fais comment alors :??:


perso pour ce genre de besoin moi j'ai utilisé JAI ... ca fait un peu massue pour écraser un parasite unicellulaire, mais bon ...
 
et puis le problème awt et serveur X se pose toujours :/

Reply

Marsh Posté le 06-04-2004 à 00:28:42    

y'a des ptites libs sympa qui sont compatible 1.3
j'utilisais ... euh merde oublié le nom.... qui etait orientée analyse d'image mais avec un codec gif integré ..


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 06-04-2004 à 00:51:27    

the real moins moins a écrit :

y'a des ptites libs sympa qui sont compatible 1.3


 :o JAI c'est gros, JAI c'est mieux :o

Reply

Marsh Posté le 06-04-2004 à 22:15:30    

Bon, y'en a marre de ce JAVA et ses 10 000 000 de classes moins bien documentées les unes que les autres :fou: :fou: :fou:
 
Comme je sais si bien le faire, je reprends le problème à la base.
Je vais me faire ma propre classe !
 
C'est pas la mer à boire, y'a que 3 types de fichiers à prendre en compte : PNG, GIF et JPEG.
 
J'ai commencé à regarder, et c'est super simple. Tous les formats de fichiers ont un header qui fourni des infos comme :
1- Une signature qui permet de vérifier le type de fichier.
2- La largeur de l'image en pixels.
3- La hauteur de l'image en pixels.
 
Et là je retombe dans les méandres de JAVA :fou:
 
J'ai donc un byte[] qui contient un fichier binaire.
 
Comment je fais pour transformer, par exemple pour le PNG, les 4 octets d'offset 16, 17, 18 et 19 en un nombre manipulable :??:  :??:  :??:
 
J'ai essayé 'stupidement' de construire une chaîne hexa et ensuite de convertir cette chaîne en int, mais c'est tombé à l'eau parce-que les bytes sont signé ou un truc du genre...
 
Bref, c'est un truc que je saurais faire dans tous les languages que je connais SAUF java...
 
C'est quoi le truc, PLEASE ? ? ?


Message édité par Mara's dad le 06-04-2004 à 22:17:15

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 06-04-2004 à 23:00:17    

tab[19] + tab[18] * 256 + tab[17] * 256 * 256 + tab[17] * 256 * 256 * 256 [:spamafote]

Reply

Marsh Posté le 06-04-2004 à 23:06:47    

J'y ai pensé, mais le problème, c'est que les bytes ne vont pas de 0 à 255. Ils sont signés...
Faut donc défaire la complétion à 9 et ensuite fire comme tu dis.
 
Je me dis qu'il doit quand même y avoir plus simple...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 07-04-2004 à 14:14:28    

Ok !
Vala une tite classe qui vérifie le format des GIF, JPEG et PNG et qui retourne la largeur et la hauteur en Pixels !
 

Code :
  1. public class ImageInformation
  2. {
  3.     private int _nWidth;
  4.     private int _nHeight;
  5.     /**
  6.      * Creates a new ImageInformation object.
  7.      */
  8.     public ImageInformation(  )
  9.     {
  10.     }
  11.     /**
  12.      * Creates a new ImageInformation object.
  13.      *
  14.      * @param nWidth DOCUMENT ME!
  15.      * @param nHeight DOCUMENT ME!
  16.      */
  17.     private ImageInformation( int nWidth, int nHeight )
  18.     {
  19.         _nWidth = nWidth;
  20.         _nHeight = nHeight;
  21.     }
  22.     /**
  23.      * @return
  24.      */
  25.     public int getHeight(  )
  26.     {
  27.         return _nHeight;
  28.     }
  29.     /**
  30.      * @return
  31.      */
  32.     public int getWidth(  )
  33.     {
  34.         return _nWidth;
  35.     }
  36.     /**
  37.      * @param i
  38.      */
  39.     public void setHeight( int i )
  40.     {
  41.         _nHeight = i;
  42.     }
  43.     /**
  44.      * @param i
  45.      */
  46.     public void setWidth( int i )
  47.     {
  48.         _nWidth = i;
  49.     }
  50.     /**
  51.      * Return an ImageInformation for a PNG image or null
  52.      *
  53.      * @param buffer The image bytes.
  54.      *
  55.      * @return ImageInformation
  56.      */
  57.     public static ImageInformation getInfoForPNG( byte[] buffer )
  58.     {
  59.         // First check for the PNG signature
  60.         int[] signature =
  61.         {
  62.             0x0089,
  63.             0x0050,
  64.             0x004E,
  65.             0x0047,
  66.             0x000D,
  67.             0x000A,
  68.             0x001A,
  69.             0x000A
  70.         };
  71.         int i = 0;
  72.         while( i < signature.length )
  73.         {
  74.             if( ( buffer[i] & signature[i] ) != signature[i] )
  75.             {
  76.                 return null;
  77.             }
  78.             i++;
  79.         }
  80.         // The read Width
  81.         int nWidth = 0;
  82.         for( i = 0; i < 4; i++ )
  83.         {
  84.             nWidth = nWidth + ( ( 0x00FF & buffer[i + 16] ) * ( int ) Math.pow( 256, 3 - i ) );
  85.         }
  86.         // The read Height
  87.         int nHeight = 0;
  88.         for( i = 0; i < 4; i++ )
  89.         {
  90.             nHeight = nHeight + ( ( 0x00FF & buffer[i + 20] ) * ( int ) Math.pow( 256, 3 - i ) );
  91.         }
  92.         return new ImageInformation( nWidth, nHeight );
  93.     }
  94.     /**
  95.      * Return an ImageInformation for a GIF image or null
  96.      *
  97.      * @param buffer The image bytes.
  98.      *
  99.      * @return ImageInformation
  100.      */
  101.     public static ImageInformation getInfoForGIF( byte[] buffer )
  102.     {
  103.         // First check for the GIF signature
  104.         int[] signature =
  105.         {
  106.             0x0047,
  107.             0x0049,
  108.             0x0046,
  109.         };
  110.         int i = 0;
  111.         while( i < signature.length )
  112.         {
  113.             if( ( buffer[i] & signature[i] ) != signature[i] )
  114.             {
  115.                 return null;
  116.             }
  117.             i++;
  118.         }
  119.         // The read Width
  120.         int w1 = ( ( int ) buffer[6] & 0xff ) | ( buffer[6] & 0x80 );
  121.         int w2 = ( ( int ) buffer[7] & 0xff ) | ( buffer[7] & 0x80 );
  122.         int h1 = ( ( int ) buffer[8] & 0xff ) | ( buffer[8] & 0x80 );
  123.         int h2 = ( ( int ) buffer[9] & 0xff ) | ( buffer[9] & 0x80 );
  124.         int nWidth = w1 + ( w2 << 8 );
  125.         int nHeight = h1 + ( h2 << 8 );
  126.         return new ImageInformation( nWidth, nHeight );
  127.     }
  128.     /**
  129.      * Return an ImageInformation for a JPEG image or null
  130.      *
  131.      * @param buffer The image bytes.
  132.      *
  133.      * @return ImageInformation
  134.      */
  135.     public static ImageInformation getInfoForJPEG( byte[] buf )
  136.     {
  137.  // check for "magic" header
  138.  int count = buf.length;
  139.  if( count < 2 )
  140.  {
  141.   return ( null );
  142.  }
  143.  if( ( buf[0] ) != ( byte ) 0xFF || ( buf[1] ) != ( byte ) 0xD8 )
  144.  {
  145.   return ( null );
  146.  }
  147.  int nWidth = 0;
  148.  int nHeight = 0;
  149.  boolean hasDims = false;
  150.  boolean hasComment = false;
  151.  int ch = 0;
  152.  count = 2;
  153.  while( ch != 0xDA && ! hasDims )
  154.  {
  155.   /* Find next marker (JPEG markers begin with 0xFF) */
  156.   while( ch != 0xFF )
  157.   {
  158.    ch = ( buf[count++] & 0x00FF );
  159.   }
  160.   /* JPEG markers can be padded with unlimited 0xFF's */
  161.   while( ch == 0xFF )
  162.   {
  163.    ch = ( buf[count++] & 0x00FF );
  164.   }
  165.   /* Now, ch contains the value of the marker. */
  166.   int length = 256 * ( buf[count++] & 0x00FF );
  167.   length += ( buf[count++] & 0x00FF );
  168.   if( length < 2 )
  169.   {
  170.    return ( null );
  171.   }
  172.   /* Now, length contains the length of the marker. */
  173.   if( ch >= 0xC0 && ch <= 0xC3 )
  174.   {
  175.    count++;
  176.    nHeight = 256 * ( buf[count++] & 0x00FF );
  177.    nHeight += ( buf[count++] & 0x00FF );
  178.    nWidth = 256 * ( buf[count++] & 0x00FF );
  179.    nWidth += ( buf[count++] & 0x00FF );
  180.    count += length - 2 - 5;
  181.    hasDims = true;
  182.   }
  183.   else
  184.   {
  185.    // just skip marker
  186.    count += length - 2;
  187.   }
  188.  }
  189.         return new ImageInformation( nWidth, nHeight );
  190.     }
  191. }


 
Faut tout faire soit même ...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 07-04-2004 à 14:16:13    

[:bien]
(je virerais juste les setters de ImageInformation;))


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 07-04-2004 à 14:45:10    

drapal !
 
ca pourait me servir [:meganne]
 
juste pour être sûr. La méthode que tu as utilisée est valide pour tos les formats de GIF et jpeg ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-04-2004 à 15:18:26    

-- : Yes, je vais nettoyer le code :D
 
benou : J'ai pas testé tous les formats GIFS, mais c'est basé sur la spec du dernier format GIF89a qui est identique que le GIF87a pour largeur et hauteur. Pour le JPEG, je l'ai testé sur une image issue de PaintShopPro ( un JFIF donc ) et sur une image venant d'un appareil photo qui contient plein de headers en plus comment des commentaires et même une miniature.
De plus, le code de base pour GIF et JPEG n'est pas de moi :D je l'ai trouvé là : http://www.mail-archive.com/cocoon [...] 26086.html
 
Si t'as 1 heure, je reviens avec un code épuré des setters et plus homogène dans sa manière de traiter les bytes de manière à rendre le code plus compréhensible...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 07-04-2004 à 15:43:23    

Mara's dad a écrit :


Si t'as 1 heure, je reviens avec un code épuré des setters et plus homogène dans sa manière de traiter les bytes de manière à rendre le code plus compréhensible...


génial !
 
Je sais qu'il y a un format de jpeg spécific au noir&blanc (je le sais pacre que ce type de jpeg passe pas sur les tel i-mode [:ddr555]). Faudrait voir si les headers sont identiques ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-04-2004 à 16:07:59    

Bon cette fois c'est la bonne :D
 

Code :
  1. public final class ImageInformation
  2. {
  3.     private static final int FFh = 0x000000ff;
  4.     private static final byte[] SIGNATURE_PNG =
  5.     {
  6.         ( byte ) 0x89,
  7.         ( byte ) 0x50,
  8.         ( byte ) 0x4E,
  9.         ( byte ) 0x47,
  10.         ( byte ) 0x0D,
  11.         ( byte ) 0x0A,
  12.         ( byte ) 0x1A,
  13.         ( byte ) 0x0A
  14.     };
  15.     private static final byte[] SIGNATURE_GIF =
  16.     {
  17.         ( byte ) 0x47,
  18.         ( byte ) 0x49,
  19.         ( byte ) 0x46
  20.     };
  21.     private static final byte[] SIGNATURE_JPEG =
  22.     {
  23.         ( byte ) 0xFF,
  24.         ( byte ) 0xD8
  25.     };
  26.     private int _nWidth;
  27.     private int _nHeight;
  28.     /**
  29.      * Creates a new ImageInformation object.
  30.      *
  31.      * @param nWidth : Image width
  32.      * @param nHeight : Image Height
  33.      */
  34.     private ImageInformation( int nWidth, int nHeight )
  35.     {
  36.         _nWidth = nWidth;
  37.         _nHeight = nHeight;
  38.     }
  39.     /**
  40.      * @return int : width
  41.      */
  42.     public int getWidth(  )
  43.     {
  44.         return _nWidth;
  45.     }
  46.     /**
  47.      * @return int : height
  48.      */
  49.     public int getHeight(  )
  50.     {
  51.         return _nHeight;
  52.     }
  53.     /**
  54.      * Return an ImageInformation for a PNG image or null
  55.      *
  56.      * @param buffer The image bytes.
  57.      *
  58.      * @return ImageInformation
  59.      */
  60.     public static ImageInformation getInfoForPNG( byte[] buffer )
  61.     {
  62.         // First check for the PNG signature
  63.         if( !checkSignature( buffer, SIGNATURE_PNG ) )
  64.         {
  65.             return null;
  66.         }
  67.         int i;
  68.         // The read Width
  69.         int nWidth = ( ( buffer[16] & FFh ) << 24 ) | ( ( buffer[17] & FFh ) << 16 ) | ( ( buffer[18] & FFh ) << 8 ) | ( buffer[19] & FFh );
  70.         // The read Height
  71.         int nHeight = ( ( buffer[20] & FFh ) << 24 ) | ( ( buffer[21] & FFh ) << 16 ) | ( ( buffer[22] & FFh ) << 8 ) | ( buffer[23] & FFh );
  72.         return new ImageInformation( nWidth, nHeight );
  73.     }
  74.     /**
  75.      * Return an ImageInformation for a GIF image or null
  76.      *
  77.      * @param buffer The image bytes.
  78.      *
  79.      * @return ImageInformation
  80.      */
  81.     public static ImageInformation getInfoForGIF( byte[] buffer )
  82.     {
  83.         // First check for the GIF signature
  84.         if( !checkSignature( buffer, SIGNATURE_GIF ) )
  85.         {
  86.             return null;
  87.         }
  88.         // The read Width
  89.         int nWidth = ( buffer[6] & FFh ) | ( ( buffer[7] & FFh ) << 8 );
  90.         // The read Height
  91.         int nHeight = ( buffer[8] & FFh ) | ( ( buffer[9] & FFh ) << 8 );
  92.         return new ImageInformation( nWidth, nHeight );
  93.     }
  94.     /**
  95.      * Return an ImageInformation for a JPEG image or null
  96.      *
  97.      * @param buffer The image bytes.
  98.      *
  99.      * @return ImageInformation
  100.      */
  101.     public static ImageInformation getInfoForJPEG( byte[] buffer )
  102.     {
  103.         // First check for the JPEG signature
  104.         if( !checkSignature( buffer, SIGNATURE_JPEG ) )
  105.         {
  106.             return null;
  107.         }
  108.         int nWidth = 0;
  109.         int nHeight = 0;
  110.         boolean hasDims = false;
  111.         int ch = 0;
  112.         int count = 2;
  113.         while( ch != 0xDA && !hasDims )
  114.         {
  115.             /* Find next marker (JPEG markers begin with 0xFF) */
  116.             while( ch != FFh )
  117.             {
  118.                 ch = ( buffer[count++] & FFh );
  119.             }
  120.             /* JPEG markers can be padded with unlimited 0xFF's */
  121.             while( ch == FFh )
  122.             {
  123.                 ch = ( buffer[count++] & FFh );
  124.             }
  125.             /* Now, ch contains the value of the marker. */
  126.             int length = 256 * ( buffer[count++] & FFh );
  127.             length += ( buffer[count++] & FFh );
  128.             if( length < 2 )
  129.             {
  130.                 return ( null );
  131.             }
  132.             /* Now, length contains the length of the marker. */
  133.             if( ch >= 0xC0 && ch <= 0xC3 )
  134.             {
  135.                 count++;
  136.                 nHeight = ( ( buffer[count++] & FFh ) << 8 ) | ( buffer[count++] & FFh );
  137.                 nWidth = ( ( buffer[count++] & FFh ) << 8 ) | ( buffer[count++] & FFh );
  138.                 count += length - 2 - 5;
  139.                 hasDims = true;
  140.             }
  141.             else
  142.             {
  143.                 // just skip marker
  144.                 count += length - 2;
  145.             }
  146.         }
  147.         return new ImageInformation( nWidth, nHeight );
  148.     }
  149.     /**
  150.      * Check the signature of an immage buffer
  151.      *
  152.      * @param signature : byte array
  153.      * @param buffer : byte array
  154.      *
  155.      * @return boolean
  156.      */
  157.     private static boolean checkSignature( byte[] buffer, byte[] signature )
  158.     {
  159.         // Check ~approximate~ minimum buffer size
  160.         if( buffer.length < 32 )
  161.         {
  162.             return false;
  163.         }
  164.         // Check signature
  165.         for( int i = 0; i < signature.length; i++ )
  166.         {
  167.             if( buffer[i] != signature[i] )
  168.             {
  169.                 return false;
  170.             }
  171.         }
  172.         return true;
  173.     }
  174. }


 
Specs pour GIFnnx : http://www.dcs.ed.ac.uk/home/mxr/gfx/2d/GIF89a.txt
Specs pour PNG : http://www.w3.org/TR/REC-png.html#C.IHDR
Specs pour JPEG : http://www.funducode.com/freec/Fil [...] rmat3b.htm
 
Pour tes Jpegs noir&blanc je pense pas que le problème soit le format du fichier, mais plutôt sur les algo de compression/décompression des données de l'image dont je n'ai rien à faire :D
 
Si vous trouvez des bugs, n'hésitez pas à me prévenir, merci.
 
EDIT : Modif du code pour remplacer le multiplications par 256 par des 'décallages' de les additions par des 'OR'.
Je ne sais pas si c'est plus optimisé en Java, mais en tout cas, c'est plus propre :D


Message édité par Mara's dad le 07-04-2004 à 19:28:57

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 07-04-2004 à 16:17:33    

on dirait du C :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 07-04-2004 à 17:06:50    

Yes :D
 
C'est clair qu'on voit tout de suite le language pas du tout adapté à ce genre d'accrobaties...
 
J'aurai dû transformer mon tableau de bytes en un Document XML et traiter le problème en XSL-T :o


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 07-04-2004 à 17:07:32    

je parle du code style :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 07-04-2004 à 17:10:14    

Mara's dad a écrit :

C'est clair qu'on voit tout de suite le language pas du tout adapté à ce genre d'accrobaties...


bha, c'est la même syntaxe que le C ... le seul truc c'est les bye signés (quelle connerie ! :/)


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-04-2004 à 17:27:48    

benou a écrit :

bye signés

ciao non-signé.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 07-04-2004 à 17:29:47    

nraynaud a écrit :

ciao non-signé.


:o
 
( [:netbios] )


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-04-2004 à 19:29:23    

Maj du code, voir EDIT...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-04-2004 à 13:52:42    


Les méthodes pour obtenir largeur et heuteur d'une image renvoient -1 tant que l'image n'est pas chargée.
 
Il faut utiliser un MediaTracker pour charger l'image.
On peut se mettre en attente jusqu'à ce que l'image soit chargée et après miracle ...

Reply

Marsh Posté le 15-04-2004 à 14:58:00    

C style forever ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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