Comprobación del tamaño de una imagen con GWT

Tengo una aplicación GWT que genera archivos SVG.

Quiero incrustar una imagen de alguna URL en mi SVG, pero quiero que se cambie de tamaño manteniendo la relación de aspecto correcta.

Hago esto cargando la imagen usando la clase Image en GWT, y verifico la altura a la anchura, luego hago algunas sumas para encontrar la altura y la anchura que necesito que esté en mi SVG.

Incrusto la imagen en el SVG de la siguiente manera:

<image href="http://some.image/URL.png" height="100" x="50" width="150" y="50"></image>

El problema que tengo es cuando hago lo siguiente:

Image image = new Image(sourceURL);
int width = image.getWidth();
int height = image.getHeight();
....

La primera vez que hago esto para una URL en particular, el valor de ancho o alto vuelve a ser 0. Desafortunadamente, volver a intentarlo en un bucle no parece solucionar el problema, pero si le pido a mi aplicación que genere el SVG nuevamente, funciona.

¿Alguna idea?

preguntado el 09 de marzo de 12 a las 23:03

Recuerda que mientras no se haya cargado la imagen, no se sabe el ancho y el alto. Probablemente debería esperar a que se dispare el evento "Cargado" y luego hacer sus cosas. -

@GuillaumePolet Intenté hacer eso, pero el evento tardó más de un minuto en ser despedido. Pero si le pregunto a la aplicación dos veces en 10 segundos, se carga instantáneamente en el segundo intento. -

Debe haber algo mal en su código porque ya he usado esos métodos con éxito y no tardó ni un minuto en cargar. ¿Podría intentar reproducir el error en un SSCCE (sscce.org)? Puede ayudarte a encontrar tu error. Si no, podemos echarle un vistazo. -

De hecho, acabo de intentarlo de nuevo y nunca veo que se llame al controlador de carga, incluso cuando el ancho de la imagen vuelve a ser distinto de cero. -

1 Respuestas

Ok, lo siento, esta no es una respuesta, pero los comentarios son demasiado pequeños para poner algún código.

Intenté lo siguiente y funcionó perfectamente. Por lo tanto, probablemente debería intentar aislar su problema en un código más pequeño:

    @Override
    public void onModuleLoad() {

    final Image image = new Image("https://www.google.com/images/srpr/logo3w.png");
    image.addLoadHandler(new LoadHandler() {

        @Override
        public void onLoad(LoadEvent event) {
            Window.alert(image.getWidth() + " " + image.getHeight());
        }
    });
    RootLayoutPanel.get().add(image);
    }

respondido 10 mar '12, 00:03

gracias por este código de muestra, configuré un proyecto con este código pero parece que no funciona. No se vuelve a llamar al controlador de carga. - Luketorjussen

Acabo de ver la imagen en el navegador web en una nueva pestaña, luego volví a ejecutar el código de muestra y funcionó... Pero la pregunta sigue siendo, ¿por qué no encuentra la imagen la primera vez? - Luketorjussen

Ok, entonces tal vez hay algunos problemas con su navegador. ¿Has probado con otro diferente? Si está utilizando FF, ¿tal vez intente deshabilitar algunas extensiones? Sé que tuve problemas muy graves con las herramientas de desarrollo web. - Guillermo Polet

Tengo el mismo problema en todos los navegadores de todas las máquinas que he probado. ¿Podría ser un error de GWT? (No puedo ver dónde podría estar el error en mi código dado que obtuve el mismo resultado con la pequeña muestra que diste) - Luketorjussen

¿Alguna vez se agregó la imagen al documento? De lo contrario, el navegador no lo cargará y no se llamará al LoadHandler. También cambié la URL de mi imagen de muestra en mi código porque no funcionó muy bien: Guillermo Polet

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.