CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 01 Oct 2020 14:42

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 34 mensajes ]  Ir a página 1, 2, 3  Siguiente
Autor Mensaje
 Asunto: svg y escalado
NotaPublicado: 31 Ago 2010 11:48 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Estoy intentando escalar mi primera imagen svg.

Código:
aCreature.getIO().addFrame ( ImageConstants.TOP , 400 );
aCreature.getIO().useImage ( world.getWorldPath() + "imagen/intro.svg", ImageConstants.FRAME, ImageConstants.FIT_BOTH);


Según creo con esto he creado un marco de 400 pixels encima del texto de la aventura y añadido una imagen svg, que debería deformarse adaptándose al tamaño de la ventana, pero en vez de eso, lo único que consigo es que la imagen aparezca a la derecha del texto, sin escalar y tapada por el margen de la ventana y del texto.

Si cambio el BOTH por HEIGHT entonces aparece debajo del texto con parecidas limitaciones a la anterior.

Si pongo el WIDTH entonces aparece a la izquierda del texto.

La imagen mide 400x374 pixeles
¿Estoy haciendo algo mal?

Saludos
Jenesis

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 31 Ago 2010 12:01 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Pues así a ojo no veo nada mal, voy a probar yo ese mismo código con alguna imagen que tenga por aquí a ver si me pasa lo mismo y veo cuál es el problema.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 31 Ago 2010 12:07 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Ah, ya está... lo he probado y entonces me he dado cuenta del error.

Es que te falta un parámetro:

aCreature.getIO().useImage ( world.getWorldPath() + "imagen/intro.svg", ImageConstants.FRAME, ImageConstants.TOP, ImageConstants.FIT_BOTH);

El ImageConstants.TOP hace falta para decirle al método en qué posición quieres poner la imagen (en este caso sólo declaraste un frame; pero podría haber más).

Al no poner eso, el método te cogió el FIT_BOTH como parámetro de posición y resulta que ImageConstants.FIT_BOTH tiene internamente el mismo valor que ImageConstants.RIGHT, así que te lo puso a la derecha (aunque no hayas declarado un frame a la derecha, al mandarle poner una imagen ahí te lo crea con una anchura por defecto).

En resumen, si le añades ese ImageConstants.TOP que he puesto en negrita, debería funcionar.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 31 Ago 2010 15:45 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Sí, funciona la posición pero no el escalado.
O al menos no del modo esperado, de hecho la primera de mis imágenes (que ya tengo 2 !!! :mrgreen: ) sale enorme y solo se ve el area central de la misma.

La siguente sale bien, porque se ve entera, solo por eso, y no lo entiendo porque ambas tienen el mismo tamaño. :roll: O sea, sigue sin funcionar el escalado y además una de las imágenes no se ve bien.

Una nota que explica porque no se muestra un "blureado" que he puesto en una de ellas. SVGLoader: Could not identify tag 'fegaussianblur'

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 31 Ago 2010 15:54 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
En mi máquina funciona el escalado, si pongo FIT_BOTH rellena toda el área del frame con la imagen:

Imagen

¿Lo que ves no se parece a eso? Si no, mándame la imagen para probar yo a ver.

Lo del blur, pues ya no sé, es cosa de la librería de SVG... no sé si es que hay varias versiones del estándar SVG y la librería no soporta la más moderna, o si es que no es un estándar y cada programa mete sus cosas que otros no leen, o qué. Aquí ya deberías preguntarle a alguien que sepa algo de SVG, porque yo no tengo ni idea del tema (y he hecho una búsqueda en Google pero no me ha aclarado gran cosa).

Edit: mirando más en Google, he visto que esta librería de SVG no soporta "filtros" y que por lo visto eso del Gaussian Blur es un "filtro". Así que mientras no salga una nueva versión de la librería, me temo que no podrás usar eso del gaussian blur (la alternativa sería usar la librería Batik que lo soporta todo, pero ocupa 20 megas o así).

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 31 Ago 2010 16:59 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:

¿Lo que ves no se parece a eso? Si no, mándame la imagen para probar a ver.


Bueno, parece que empiezo a entender lo que pasa...
Las imágenes,eran más grande que el lienzo sobre el que la habían creado. Ahora escalan bien. :)
Curiosamente la imagen del ejemplo que has mostrado no me escala y me aparece también gigantesca, así que además de un problema con el mal diseño de mis propias imágenes, parece que también lo hay con alguna otra cosa... seguiré haciendo pruebas.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 31 Ago 2010 17:01 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Vale, arreglado parece ser que el fallo de no utilizar adecuadamente el lienzo en inkscape es bastante habitual. xD
Ahora escala y se ve correctamente. :)

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 09:04 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Más cosas...

Me he dado cuenta de que si en el código se pide mostrar una imagen que no existe, el sistema la ignora y no muestra nada, pero no en el caso de los svg ocurre lo siguiente.

Código:
bsh.TargetError found at parseCommand(), command was gritar, room number 10000023, error was Sourced file: inline evaluation of: ``parseCommand( arg0, arg1, arg2);'' : Method Invocation useImage : at Line: 98 : in file: inline evaluation of: ``//cuarto intro     //temporizador que calcula los turnos en los que el guerrero est . . . '' : .useImage ( world .getWorldPath ( ) + "imagen/noimagen.svg" , ImageConstants .FRAME , ImageConstants .TOP , ImageConstants .FIT_BOTH )

Target exception: java.lang.NullPointerException
**
Error: java.lang.NullPointerException
Location: inline evaluation of: ``//cuarto intro     //temporizador que calcula los turnos en los que el guerrero est . . . ''
Line: 98
Offending text: .useImage ( world .getWorldPath ( ) + "imagen/noimagen.svg" , ImageConstants .FRAME , ImageConstants .TOP , ImageConstants .FIT_BOTH )
Message: Sourced file: inline evaluation of: ``parseCommand( arg0, arg1, arg2);'' : Method Invocation useImage


¿Puedes comprobar si a ti te pasa lo mismo ?

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 11:28 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
jenesis escribió:
¿Puedes comprobar si a ti te pasa lo mismo ?

Sí, he comprobado que me pasa. Es que la librería de SVG tiene un manejo de errores rarísimo, resulta que en lugar de lanzar excepciones cuando no encuentra un fichero (que sería lo estándar) imprime un mensaje de error él por su cuenta... y en vez de devolver null (que sería lo "segundo estándar" si no has hecho lo primero) te devuelve una instancia de un icono SVG que no es null, pero que si la intentas dibujar, te tira esa NullPointerException que has visto :x

Voy a ver si puedo puentear ese manejo de errores tan nefasto para que no se vea esa excepción si el fichero no existe, pero puede que me lleve su tiempo dado que tengo que descubrir cómo se comprueba si el fichero que le pasas a la librería fue cargado correctamente teniendo en cuenta que ésta ni tira excepciones ni devuelve null, y la documentación de la susodicha librería es prácticamente inexistente. Seguro que existe manera pero la cosa es encontrarla.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 14:24 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Sugerencia:
Abandona esa librería de SVG y busca otra que la replique en funcionalidades. Tener que corregirla a ese grado significa que nada de lo de dentro puede ser bueno. :(

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 14:59 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
Eliuk Blau escribió:
Sugerencia:
Abandona esa librería de SVG y busca otra que la replique en funcionalidades. Tener que corregirla a ese grado significa que nada de lo de dentro puede ser bueno. :(

Ésta ocupa 300 KB y la otra que conozco ocupa veinte megas, así que las críticas llegarían hasta el infinito :P Aparte de que tampoco sé si irá mejor para lo que yo quiero. Ésta funcionar, funciona.

Realmente tampoco creas que necesariamente tiene que ser malo lo de dentro. Por lo que he visto en distintas librerías, mucha gente que programa librerías multimedia son gente muy de lenguajes de bajo nivel, que crea código con un cero en modularidad y orientación a objetos pero que hace lo que tiene que hacer. Esas típicas clases espagueti que parecen hechas en C, empiezas a ver arrays tipo int[] tal = { 0x001F, 0x04C3, 0x02C2 ... } por todas partes y virguerías de todo tipo con operaciones de bits con las que te quedas maravillado y dices "wow, qué magia negra"; pero luego resulta que el tío no sabe lanzar una excepción :D

Si le echas un ojo al código de Glk del Zag, es de ese estilo (el de la librería de SVG no lo he mirado, que conste).

Por cierto, y aunque un poco off-topic: problemillas como éste son un ejemplo de uno de los motivos por los que prefiero lenguajes/plataformas con una API estándar bastante grande y exhaustiva como es Java. Mientras uno usa clases estándar de la API, uno sabe que puede confiar en que van a seguir unos estándares de calidad, tanto el código en sí como (importante) la documentación; además de estándares de nombrado, etc. En cuanto uno se ve obligado a salir de las clases estándar, como es el caso con esto del SVG, esas garantías desaparecen y puede uno encontrarse lo mismo con librerías muy bien hechas que con otras mucho peores. Y además, incluso en el caso de las librerías bien hechas, acaban dando más trabajo porque lo normal es que no sean muy coherentes y uniformes entre sí (si uno usa una librería para MP3 y otra para MOD, tirarán distintas excepciones que luego habrá que capturar todas, o igual una tira excepción y otra devuelve null, etc.)

Por eso me parece que tener una API grande ahorra mucho esfuerzo de desarrollo, aunque para gustos colores.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 15:59 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:
Eliuk Blau escribió:
Sugerencia:
Abandona esa librería de SVG y busca otra que la replique en funcionalidades. Tener que corregirla a ese grado significa que nada de lo de dentro puede ser bueno.


Ésta ocupa 300 KB y la otra que conozco ocupa veinte megas, así que las críticas llegarían hasta el infinito Aparte de que tampoco sé si irá mejor para lo que yo quiero. Ésta funcionar, funciona.


Bueno, mi aventura no va a ocupar más de 15 megas con el intérprete y todo...

He jugado a aventuras "gráficas" en mi DS que ocupaban más de 100 y no tenían animaciones más complejas que las que se pueden conseguir con SVG, de hecho algunas no tenían animaciones, eran todo recorridos por imágenes estáticas en las escenas y luego unos cuantos "hot spots" en las pantallas de juego que respondían al click del ratón y obraban en consecuencia, a veces con un simple cambio de imagen sin ninguna animación.

Hace poco jugué una que me encantó, "Theresia", con bastantes puzzles y mucha literatura. Durante todo el juego no pude dejar de encontrarle cierta similitud con una conversacional, no tenía animaciones y las imágenes bien podrían haber sido el complemento de las descripciones de cualquier conversacional.
Visto de ese modo estoy de acuerdo con alguien que dijo que era mucho más difícil hacer una conversacional que una "point&click", dado que éstas no tienene necesidad de entender al usuario.

Yo creo que es hora de cambiar el "chip", valorar en lo que se merece lo que hacemos, y sacar provecho de esa conversación que el usuario puede permitirse llevar con la máquina y que otros juegos no ofrecen.
Si podemos hacer tan buenos gráficos como los de los juegos comerciales, añadir una música y efectos sonoros que ayudan a crear ambiente y además podemos hablar con la máquina... ¿no estamos ya por encima de esos "point&click" ?

No me importaría que mi proyecto ocupara 100mb, si la calidad del mismo lo requiriese, y no creo que a nadie le importara descargar una conversacional de ese tamaño por las mismas razones. Otra cosa sería que mi proyecto actual tuviera tal calidad... ójala...
Así que si se diera el caso de que una librería de AGE ocupara 30 mb, yo no tengo la más mínima objeción en ello. Otra cosa es que en este caso merezca o no la pena cambiarla, pero por tamaño que no sea.

Saludos
Jenesis

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 16:45 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5312
Ubicación: Coruña
He hecho otra vez lo de confundir el botón "editar" por "citar", esto de la memoria posicional me mata :D

Bueno, entonces en cuanto tenga bastante tiempo le echaré un vistazo a la otra librería de SVG, para ver si merece la pena o no el cambio. Yo mismo ya ves que no soy defensor de grandes ahorros de espacio; pero si la diferencia entre que cuando una imagen no exista te salga un mensaje de error feo o no te salga es veinte megas, no merecería la pena el gasto (sobre todo teniendo en cuenta que el usuario final no debería ver esos mensajes porque la imagen debería existir, al fin y al cabo :D) Otra cosa sería que hubiera más diferencias, como que la otra librería soportara eso del gaussian blur y cosas similares, en cuyo caso sí podría valer la pena.

De todas formas, en principio no le voy a dar mucha prioridad a esto, ya que llevaría bastante tiempo que es un recurso escaso y hay mejoras más importantes (al fin y al cabo, la librería actual funciona en lo fundamental, que es mostrar las imágenes y escalarlas).

Por supuesto, si finalmente decido hacer el cambio, eso no afectaría para nada a la programación de aventuras. Es decir, el método useImage funcionaría exactamente igual (aunque por dentro estaría implementado de otra manera) y el código que tengas escrito con la librería actual funcionaría con la otra. Así que puedes seguir haciendo los SVG e integrándolos en la aventura (salvo que hayas decidido abandonar el formato por esos problemas del Inkscape, en los que me temo que no te puedo ayudar porque no tengo ni idea...) sin estar pendiente de ese tema.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 17:06 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Al-Khwarizmi escribió:

De todas formas, en principio no le voy a dar mucha prioridad a esto, ya que llevaría bastante tiempo que es un recurso escaso y hay mejoras más importantes (al fin y al cabo, la librería actual funciona en lo fundamental, que es mostrar las imágenes y escalarlas).

Por supuesto, si finalmente decido hacer el cambio, eso no afectaría para nada a la programación de aventuras. Es decir, el método useImage funcionaría exactamente igual (aunque por dentro estaría implementado de otra manera) y el código que tengas escrito con la librería actual funcionaría con la otra. Así que puedes seguir haciendo los SVG e integrándolos en la aventura (salvo que hayas decidido abandonar el formato por esos problemas del Inkscape, en los que me temo que no te puedo ayudar porque no tengo ni idea...) sin estar pendiente de ese tema.


Por ahora voy a seguir con ello, no todas las imágenes necesitan un "blur", ni llevar el texto a un "path", y las demás ventajas del escalado son obvias.
Lo más que puede pasar es que meta algún png puntual, pero nada más.

Y no tengo prisa por esas posibles mejoras. Entre terminar los gráficos y pulirlos y seguir con ese curso rápido de inkscape que estoy haciendo, tengo para un buen rato.. :lol:

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
NotaPublicado: 02 Sep 2010 17:25 
Desconectado
xyzzy

Registrado: 09 Mar 2004 22:50
Mensajes: 9150
Una cosa más, por alguna razón el escalado con HEIGHT no funciona, no da error pero no escala a lo alto. Sí que funciona con WIDTH.

_________________
Si la mentira tuviera color, todos seríamos daltónicos...


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 34 mensajes ]  Ir a página 1, 2, 3  Siguiente

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM