Buenas a todos,
Necesito redimensionar una imagen en lua hm7. Pero, creo, que no hay una función que haga eso. Y un algoritmo de como hacerlo no tengo idea de como sería. Así que les pregunto, ¿Hay algún algoritmo o función el cual redimencione o escale imagenes en lua hm7?
Un saludo y gracias de antemano.
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.
No preguntes por MP, mejor pregunta aquí.
Gracias a todos.
Al final me quedaré con la función de Trom_Us. Ya que es el que me pareció más efectivo y rápido (=P).
Un saludo y gracias de nuevo.
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderas trucos para resolver tus dudas antes.
No preguntes por MP, mejor pregunta aquí.
hm redimensionar imagenes
Sí, lo que habeis puesto son buenas formulas para redimensionar imagenes.
Weno, contando que hm tiene un error en el modo que usa el 3d, no podemos entrar y salir de dibujo 3d cuando keramos, sólo al final de un frame (este homemister...), así que, si nuestra imagen va a estar encima del resto de cosas, bien podríamos utilizar... el gu de la consola.
o sea, para reescalar una imagen, al vuelo, sería:
start3d,
2 vertices, uno arriba izkierda de donde kiere aparecer, o sea, x e y.
vertices del tipo textura, u y v del primer vertice = 0,0. (inicio de nuestra imagen)
el segundo vertice, x + w, y + h (la eskina contraria de la imagen)
u y v = 1,1 (final de nuestra imagen).
Seteamos la imagen como textura.
drawarray de esos dos vertices
Y voilá, super speeded image stretching!
(Con eso ademas se pueden aplicar efectos de tintado, así que es una buena solución)
En el caso de kerer dibujarla debajo de otras cosas, la cosa ya cambia, y lo suyo sería hacer caché de esta imagen ya reescalada, usando el otro metodo de reescalado, pero si no, este va de lujo.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
aca
lo que creo explica DeViaNTe.
GuinXell aprender mas...
voy a agregar que...
primero en GuinXell, existe una funcion para ello: ejemplo de como se usa....
pero... aca les dejo la funcion en concreto, para que podamos darnos cuenta de que tan cierto es que GuinXell optimiza las interacciones mas comunes...
con esto entederemos que si comparamos hacerlo pixel por pixel, obtendriamos en numero... en una imagen de 100x100
, una cantidad de 100x100 del recorrido + (100x100)*2 del tiempo que se lleva en leer y escribir, + eso x 2 del tiempo que la psp se tarde en hacer dicho movimiento.
en cambio con img.stretch(), obtenemos si leemos bien, una cantidad de 100+100 del recorrido, + 100+100 del tiempo que lee y escribe, + 100+100 el tiempo que se tarde en hacer todo eso, multiplicado por dos
resultados en numero... si calcule bien, es 60,000 vs 800, en numeros, si existe una gran diferencia. talvez me faltaron candidaes como el maximizado o minimizado de la imagen resultante, pero solo aumentaria los numeros, que reducido a tiempo, es mucho. espero les haya ayudado. saludos.
P.D. en otras palabras, cuando usen esa funcion BAN!!!, en caliente obtienen el resultado.
GuinXell aprender mas...
Duda sobre el código
Antes de nada decir que vaya forma de nombrar las variables, parece más Perl ofuscado que Lua, espero que no uses esa forma en los ejemplos de tus funciones. xDD
Luego hay una cosa que no entiendo, primero porque me pierdo con esas variables de nombre tan ofuscado, y luego porque veo que tienes 2 bucles que recorren el primero una fila, y el segundo una columan de la imagen. ¿Dónde se miran los demás píxeles?. Igual me pierdo con algo que hace la función blit, cuya sintaxis no conozco, de ahí mi pregunta. No veo optimización del resto de píxeles, tanto de mayor a menor como de menor a mayor.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
el problema mas que nada...
es que no sabes de las funciones luaplayer, y si en base a lo basico uno programa pues quedan programas como usar pixel por pixel.
desconosco si en C para PSP haya algo parecido a las funcones que use aca. te explico.
"Antes de nada decir que vaya forma de nombrar las variables,
parece más Perl ofuscado que Lua, espero que no uses esa forma en los
ejemplos de tus funciones. xDD" no son ejemplos,y cada quien tendra su manera, si no te gusta ya es cosa muy aparte deacuerdo.
"Luego hay una cosa que no entiendo" obvio
," primero porque me pierdo con esas
variables de nombre tan ofuscado" ahi no te puedo ayudar,
"y luego porque veo que tienes 2
bucles que recorren el primero una fila, y el segundo una columan de la
imagen. ¿Dónde se miran los demás píxeles?.".. no se leen pixeles, eso implicaria un WxH=(100x100=10000), segun las funciones que NO conoces, se lee por filas y columnas. esto es W+H(100+100=200)
"Igual me pierdo con algo que
hace la función blit, cuya sintaxis no conozco, de ahí mi pregunta." , de ahi que no lo comprendas.
"No
veo optimización del resto de píxeles, tanto de mayor a menor como de
menor a mayor.", la optimizacion es en el proceso, la imagen resultante no es mejor, sino el proceso que se realiza. eso es lo optimizado. ademas que añado que puedes reducirla o aumentarla.
espero haverme explicado. si tienes dudas de procesos eso si me puedes preguntar, que si es bonito para ti o feo para otros, eso no. al menos a mi no me viene al caso.
P.D. disculpa si te lo digo asi, pero es que tienes un tono para decir las cosas. hubiera sido mas facil, que me dijeras "oye, por mas que le busco no comprendo el modo en que opera dicho proceso, me lo podrias explicar" <--obviando que desconoces las funciones y sintaxis. al menos yo hoy nunca te voy a correjir en ese aspecto hablando C, ya no me acuerdo, por tanto no soy el indicado, pero en procesos?, si, talvez.
GuinXell aprender mas...
Si me estás diciendo que lees
Si me estás diciendo que lees lso píxeles por columnas y por filas, es tontería hacerlo por filas y luego por columnas. Me explico
Imagen (un caracter = pixel)
Haces un bucle que lea cada fila y la tratas
¿Para qué volver a leer las columnas si ya has leído toda la imagen sólo con las filas?. Es lo que no entendía y me estaba confundiendo.
Ahora vamos a ponernos que tenemos la primera linea y la queremos poner un 150% más grande (x = pixel vacío)
Dónde está el algorimo que hace eso. ¿El blit?, que yo sepa un blit no optimiza, tan sólo mueve pixeles de un lado a otro, si le falta espacio, recorta, y si se queda corto no los toca. Sea en Lua, en C, o en VisualBasic.
Esto haría un blit a una imagen más grande:
AB0C3F ===> AB0C3Fxxx
Y esto a una más pequeña
AB0C3F ===> AB0
Yo no sé si tú has probado ese algoritmo realmente, pero yo no veo que funcione por ningún lado. Recorta una imagen, nada que ver con redimensionar su aspecto proporcionalmente.
EDITO: En el caso que un blit optimizara una imagen, no haría falta ningún algoritmo, tan sólo blitear directamente a otra superficie de menor tamaño.
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
tendrias que probarlo
porque asi como me acabas de decir, no te entendi nada. entonces prueba si sabes como dicha funcion en lua.
no es un decir, es un echo, yo asi la utilizo.
y en efecto como el caso de pixel x pixel, o nos brincamos pixeles, o los repetimos. insisto que la funcion que yo les di da el mismo resultado que hacerlo pixel por pixel, pero "EL CODIGO" esta optimizado de forma que obtengamos el mismo resultado, pero en dos pasadas, W+H, y no en W*H.
no te puedo explicar mas, tienes que probarla si no no comprenderas de que hablo.
pero recuera la primera pasada alarga o acorta el W, pero toda la altura de un jalon. ya tenido eso. pasamos por la H y alargamos o acortamos dicha H, pero todo el ancho de un jalon, en vez de hacer lo mismo en cada pixel, si al final es el mismo resultado.
GuinXell aprender mas...
mmm...
Si, hay una forma de hacerlo, pero es demasiado lenta...
verás, trata de simple matemática, comienza a ver que pixel tocaría si la escala cambia de tanto a tanto y luego comenzar a blitear píxeles en otra imagen, lo que lo hace extremadamente lento.
Creo que sería algo así:
y la explicación:
w2 -- w1
i -- x
x = i*(w1/w2) <-- no hay pixeles decimales, por eso arriba math.floor()
h2 -- h1
j -- y
y = j*(h1/h2) <-- no hay pixeles decimales, por eso arriba math.floor()
Pura regla de 3 xD
Nota: Hay otra forma, que pongas la imagen como textura en un plano GU (2 triángulos) y luego redimensionas dicho plano... pero en luahm7 es un trámite manejar el GU xDD
Saludos!
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
me equivoqué xD
Eso, en el código de arriba se me saltaron dos )
Ahi ya está corregido... xD
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
Están mal los paréntesis.
Están mal los paréntesis. xDDD
i*(w1/w2) != (i*w1)/w2
Un saludo. :D
WTF??
osea, me quieres decir que no es lo mismo:
2*(3/2) que si digo (2*3)/2 ???? ah??????????
veamos:
2*(1.5) = 3
(6)/2 = 3
vale, va una....
i=6.2 <-- si, ya se que nunca pasará eso en mi código, pero vamos que estoy tratando de demostrar i*(w1/w2) == (i*w1)/w2
6.2*(5.3/1.2) = 6.2*(4.41666666....) = 27.383333....
(6.2*5.3)/1.2 = (32.86)/1.2 = 27.383333....
van dos, pero sinceramente no me pasaré toda la noche haciendo esto... xDDDDDD
Saludos! xDD
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
Ehhhhh???? pero qué hace
Ehhhhh???? pero qué haces loco. XDDD
En serio, hoy te pasa algo. :P
A ver fíjate bien, primero lo de los paréntesis:
De verdad, que sé que eres un gran coder y lo que pasa es que ahora se te ha ido la almendra... jajaja.
Un saludo amigo. :D
LuaDiE: Crea en Lua sin teclear código. Compatible HM7, HMv2, LuaPlayer, LuaDEV y PGE.
sorry de new
gorrister, creo k en lua no se autoconvierten en (int), sino que si es decimal, devuelve decimal, para ser mas exactos hm7 creo k usa double. Por lo tanto dividir y multiplicar por lo que sea, se realizará en el mismo orden, paréntesis o no.
Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es
Gracias Deviante, es eso. Al
Gracias Deviante, es eso. Al que se le ha "ido la almendra" es a mí. jajaja
Un saludo.
nah!
estás acostumbrado a C, es normal que pasen estas cosas. ^^
oh Dios Mio...
tio, estás conciente de lo que dices?
3/2 = 1???
osea que si multiplico 1 por 2 me dará 3???
Creo que la "discusión" con trom_us te tiene mal (si, los estoy siguiendo uno a uno sus comments xD)
PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]
07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD
Recuerda: Sé el intérprete -_-
No entendi...
No se si sere tonto o subnormal o algo pero si tu no lo sabes...Solo te queda revisar el tuto de pipagerardo