map_xputnp

Started by Hola, January 25, 2014, 02:07:00 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hola

Hola, quisiera preguntar algo, no sesi es posible hacer en bennu; Tengo un mapa en memoria, lo que necesito es copiar ese mapa a uno nuevo y reescalarlo a un determinado tamaño, con un ancho y alto determinado. Se hacer todo esto a la perfeccion, uso map_xputxp. El problema es que, el mapa en memoria (el cual copio y luego reescalo) no tendra siempre el mismo tamaño inicial, no es que siempre tendra por ejemplo 640x480. Puede variar. Y cuando reescalo la copia con map_xputnp, aunque ponga que quiero que me lo reescale al 50% en ancho y alto, el resultado no es igual en un mapa de 640x480 que en uno de 1024x766 por ejemplo. Ya se que esto es obvio. Por eso, pregunto si hay alguna manera de, independientemente del tamaño inicial del mapa a copiar, se reescale a un anchoy alto especifico? ya busque en el foro...

gracias.

gecko

tenes que usar matematica. Creo que con regla de tres se resuelve:

ancho_final = 320 = 100%
ancho_inicial = 640 = x %

donde x es (ancho_inicial * 100 ) / ancho_final

De la forma en que lo entendí creo que eso te resuelve tu problema.
Torres Baldi Studio
http://torresbaldi.com

Hola

hola gecko, he probado eso que posteaste pero no me funciona, o sea, realiza el reescalamiento pero el resultado siempre tiene un ancho diferente. No se como hacer esto, algo que por ahí es una ventaja es que los mapas están hechos a partir de 640 px, entonces hay mapas con un ancho de 640.., 1280.., 1920.., 2560, etc. Alguna idea¿

gracias.

Drumpi

¿Pero realmente cuál es el problema? ¿la falta de precisión de los porcentajes o que no sabes calcularlos?
Es que si no te sirven los reescalados de bennu, la única solución que te queda es implementar el reescalado por tu cuenta, o crear un mapa del tamaño ideal no sólo para ampliar, sino para reducirlo. Quiero decir que si con un mapa de 100 pixels no puedes hacer mapas de 1024, quizás debas hacer un mapa de 500 pixels que sea más fácil de reescalar a 1024, y que puedas usar el reescalado al 20% para reducirlo a 100 pixels.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Hola

Pense que me habia explicado bien, pero bueno. La cosa es asi, a modo de ejemplo: tengo 2 mapas. Uno de 640x480 y el otro de 1920x1440. Necesito una vista en miniatura de ambos mapas. Suponiendo que cada mapa es un nivel, si estuvieran ya creados yo entonces podria crear la vista en miniatura a mano, reescalando cada mapa en el Paint (u otro programa) por ejemplo. Pero el caso es que son mapas que se crean en memoria, y se pueden editar agregando imagenes, colores, en fin, mapas creados en memoria que necesitan de una vista en miniatura creada tambien en ejecución. La vista en miniatura deberá ser de 50x40.


El problema es que..., haciendo eso que sugirió gecko o no, al ser mapas de diferente tamaño (640x480; 1920x1440), el porcentaje a aplicar en el reescalado para obtener una vista en miniatura de 50x40, no es el mismo en un mapa que en el otro. Encima que ese par de mapas fue solo un ejemplo, el tamaño del mapa tambien se puede seleccionar en ejecución. No puedo poner que redimensione (por ejemplo) a 30% (ancho) y 20% (alto) todos los mapas no importa el tamaño porque la vista en miniatura va a ser cualquier cosa.


Espero se haya entendido, saludo.

laghengar

El mapa que creas, ponlo lo más grande que crees que puede alcanzar, por ejemplo: 1440x720 en vez de 640 x 480. Define unas variables para controlar el tamaño del mapa que has pintado, y con esas variables ve colocandolo en la parte de la pantalla que creas conveniente. Fija siempre el mismo tamaño de mapa aunque no vayas a usar ni la mitad.

Espero que se entienda, un saludo :)
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

gecko

Perdón, escribí mal, al revés, mi solucion!

el mapa original es de 640x480 por ejemplo, y vos queres que quede en 50x40:

entonces

ancho_inicial => 640 = 100%
ancho_final => 50 = X => (ancho_final * 100) / ancho_inicial = 7.8125 %

ahora si, sería una regla de 3
Torres Baldi Studio
http://torresbaldi.com

Hola

Bueno ahí si funciona de forma aceptable. Digo aceptable porque con mapas relativamente muy grandes no parece tener efecto esa formula. Pero gracias, es una solución.

Coptroner

Yo esoty programando un launcher para juegos PC y estaba buscando tambien alguna forma de re-escalar los mapas al ancho/alto de la carátula estandard que usa el programa para el catálogo de juegos.

La caratula tiene un espacio para los mapas de 383x527px y las imágenes originales provienen de todo tipo de tamaños cargados por el usuario, así que he entrado al foro para preguntar si existía alguna forma de re-escalar las imagenes de cualquier tamño irregular a otro tamaño cualquiera con independencia del alto y ancho del original.

laghengar

!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Coptroner

Quote from: laghengar on April 24, 2014, 07:31:35 PM
size_x, size_y?
Si, si eso está genial para la visualización en pantalla, pero en mi caso por ejemplo, las carátulas una vez creadas hay que grabarlas al disco con save_png(); para su posterior carga desde disco cuando reiniciamos el programa.

laghengar

Soy tonto  :-[ . Sorry.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Coptroner

Quote from: laghengar on April 25, 2014, 10:28:46 PM
Soy tonto  :-[ . Sorry.
Que vá hombre, la intención era buena :D

Se me ocurre una solucion un poco mas engorrosa...
1-Se usa el size_x y size_y para escalar la imagen desde un proceso.
2-Una vez colocada en posicion se hace un Get_screen(); obteniendo así una foto con el resultado final.
3-Se copia de ésa captura la zona deseada con un map_block_copy y se asigna a otro mapa nuevo.
4-Se guarda el nuevo mapa recortado con save_png y asi obtenemos un .png con el resultado de la imagen escalada.

Está cogido por los pelos pero puede servir, claro que la calidad de la imagen escalada quedará un pelin peor que si la escalasemos desde un programa de diseño grafico, pero bueno...


laghengar

Lo mismo no funciona pero prueba a ver los parámetros opcionales de start_scroll. Esos que se llaman destination file, y destination graph.

En la wiki pone que guarda los gráficos de la ventana de scroll. No se si se refiere a los planos del scroll exclusivamente, o a todo lo que hay por el scroll (procesos que pululen por ahí).
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

Drumpi

Coptron ¿Y qué problema tienes si MAP_XPUT y MAP_XPUTNP tienen la opción de usar size_x y size_y? Creas un nuevo mapa, pegas con el reescalado, y la guardas en PNG.
Lo dicho, para un tamaño más preciso, hay que crear el algoritmo, ya sea con un módulo en C o con código Bennu, e ir pixel a pixel. Incluso se pueden usar algoritmos más lentos que el que integra Bennu pero que son mucho mejores.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)