Para guardar una imagen modificada, lo que me ha funcionado es pasar sus pixeles (uno por uno) a otra imagen, y guardarla. Para eso, hice esta pequeña función:
function save(imagen,name)local tmp,x,y=image.create(imagen:width(),imagen:height(),0x00000000),1,1for i=1,imagen:width()*imagen:height()do
tmp:pixel(x,y,imagen:pixel(x,y))
x=x+1if x==imagen:width()then x=1 y=y+1endend
tmp:save(name)end
Tarda 1 segundo en guardar una imagen de 120*120 pix (recomendable poner el CPU a full para que tarde menos con una más grande). Funciona bien para imágenes de tamaño igual, pero no funciona para imágenes redimensionadas (me las deja como si no hubieran sido redimensionadas. Prueba, quizá a ti si te vaya), pero eso también tiene solución (manual, por supuesto xD):
Cargar la imagen
Redimensionarla
Blitearla
Capturar la pantalla con screen.toimage()
Modificar la función de arriba, para que los límites del for correspondan con la posición de la imagen redimensionada y bliteada.
Usar la función, pasándole la pantalla capturada y los límites correspondientes.
Yo mismo haría todo eso, pero no les quiero quitar toda la diversión xDD
PD. Ya saben, cualquiera es libre de usar y modificar esa función, con la correspondiente mención ;)
jajajaja siempre ahí con tus "funciones caseras" xD.
Bueno muchisimas gracias lo acabo de probar "modificandolo" un poco y funciona de 10; claro el problema es que como bien dices las imágenes "Redimensionadas" o "Escaladas" conservan su w & h inicial además otro problema es que tarda demasiado :s
De todos modos aquí dejaré tu función "Modificada" como te he dicho por si le sirve a alguien más:
Que haces con esa funcion, estas capturando una imagen de tu pantalla y luego la guardas con esa funcion?, Si es asi como haces la captura?, con screen.toimage
() O screen.buffertoimage
().
No entiendo, para que cargar una imagen y luego guardarla. Yo he usado el image.save() pero luego de hacer una captura de pantalla. Depende que quieres capturar usas el toimage o buffertoimage. En ocaciones hago un screen.waitvblankstart(25) por que si no se ve fea la captura.
Ejemplo de lo que hago:
if controls.press('triangle')then
pic=screen.toimage()--captura de pantalla asignado a pic
pic:save('ms0:/'..os.date('%I-%M')..'pic.png')end-- pic:save('ms0:/'..os.date('%I-%M')..'pic.png') es lo mismo que image.save(pic,'ms0:/'..os.date('%I-%M')..'pic.png'), lleva 2 argumentos objeto y ruta a guardar.
espero te sirva de ayuda si no pues me avisas y seguimos.
Sigo sin entender porque cargar una imagen y guardarla como has puesto en el code.
Bueno intentaré explicarme lo mejor posible porque veo que ni con imágenes...
A ver cargamos una imagen y lo que yo quiero es guardarla. Por que? Pues bien porque modifico las caracteristicas de la imagen(Escala, Rotación, Color de los píxeles...). Ese punto está claro ahora, el problema, es que no sé como hacerlo.
Y logicamente no puedo usar screen.toimage() por dos grandes incovenientes:
1. Captura una imagen de 480*272. Y si la imagen es de 340*120 por ejemplo??
2. Imaginemos qe la imagen que yo quiero almacenar está superpuesta, es decir, encima de ésta hay más imágenes. Pues las capturaría también.
Pero bueno intentaré solucionarlo por mí mismo.
Se agredece el intento de ayudar ;) un saludo amigo
Así logres guardarla, es imposible que se guarde el escalado, rotación, etcétera, que esas son modificaciones en las coordenadas del plano 3D con textura que la presenta, nada más.
Lo único sería el color de los píxeles, y si mal no recuerdo se guarda con imagen:save(ruta). Revisa el source del CSBAW&CSBUG, que guardo avatares y userbars y son imágenes al fin y al cabo.
by jorge_97
bueno he aqui un sample de lo que intento:
a=image.load("no.png")
a:blit(0,0)
screen.flip()
a=screen.toimage()
a:resize(10,10)
a:save("ms0:/c.png")
Me la guarda a un tamaño de 480x272 y yo necesito 10x10. Como lo hago??
Salu2
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
Para guardar una imagen
Para guardar una imagen modificada, lo que me ha funcionado es pasar sus pixeles (uno por uno) a otra imagen, y guardarla. Para eso, hice esta pequeña función:
Tarda 1 segundo en guardar una imagen de 120*120 pix (recomendable poner el CPU a full para que tarde menos con una más grande). Funciona bien para imágenes de tamaño igual, pero no funciona para imágenes redimensionadas (me las deja como si no hubieran sido redimensionadas. Prueba, quizá a ti si te vaya), pero eso también tiene solución (manual, por supuesto xD):
Yo mismo haría todo eso, pero no les quiero quitar toda la diversión xDD
PD. Ya saben, cualquiera es libre de usar y modificar esa función, con la correspondiente mención ;)
by jorge_97
jajajaja siempre ahí con tus "funciones caseras" xD.
Bueno muchisimas gracias lo acabo de probar "modificandolo" un poco y funciona de 10; claro el problema es que como bien dices las imágenes "Redimensionadas" o "Escaladas" conservan su w & h inicial además otro problema es que tarda demasiado :s
De todos modos aquí dejaré tu función "Modificada" como te he dicho por si le sirve a alguien más:
Con esto doy por solucionada esta duda.
Rober te debo otra más ya van 3 ;)
Cuando pueda te lo agradeceré "Materialmente"
Salu2
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
y el image.resize?
y el image.resize?
Mira bien el algoritmo que te ha dado chimecho, es clave para tu avance.
Yo no
El algoritmo se lo dio rober en un comentario más arribita.
By Jorge_97
Os agradezco vuestra ayuda pero ya lo solucioné. Funciona bien ;)
Salu2
Mmmm
Yo no veo esto en el código:
correspondan con la posición de la imagen redimensionada y bliteada.
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 uses
2 variables para lo mismo
usa b
Deja ver el trozo de code o brinda mas datos.
Que haces con esa funcion, estas capturando una imagen de tu pantalla y luego la guardas con esa funcion?, Si es asi como haces la captura?, con screen.toimage
() O screen.buffertoimage
().
by jorge_97
imagen=image.load("imagen.png")
imagen:save("guardada.png")
Ese es el Code y no funciona.
He probado tambien con screen.toimage() y screen.buffertoimage() y nada
Salu2
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
No entiendo, para que cargar
No entiendo, para que cargar una imagen y luego guardarla. Yo he usado el image.save() pero luego de hacer una captura de pantalla. Depende que quieres capturar usas el toimage o buffertoimage. En ocaciones hago un screen.waitvblankstart(25) por que si no se ve fea la captura.
Ejemplo de lo que hago:
espero te sirva de ayuda si no pues me avisas y seguimos.
Sigo sin entender porque cargar una imagen y guardarla como has puesto en el code.
By Jorge_97
Bueno intentaré explicarme lo mejor posible porque veo que ni con imágenes...
A ver cargamos una imagen y lo que yo quiero es guardarla. Por que? Pues bien porque modifico las caracteristicas de la imagen(Escala, Rotación, Color de los píxeles...). Ese punto está claro ahora, el problema, es que no sé como hacerlo.
Y logicamente no puedo usar screen.toimage() por dos grandes incovenientes:
1. Captura una imagen de 480*272. Y si la imagen es de 340*120 por ejemplo??
2. Imaginemos qe la imagen que yo quiero almacenar está superpuesta, es decir, encima de ésta hay más imágenes. Pues las capturaría también.
Pero bueno intentaré solucionarlo por mí mismo.
Se agredece el intento de ayudar ;) un saludo amigo
Dos años en SCENEBETA
Click aquí para ver la Entrada de Bitácora.
Pues
Así logres guardarla, es imposible que se guarde el escalado, rotación, etcétera, que esas son modificaciones en las coordenadas del plano 3D con textura que la presenta, nada más.
Lo único sería el color de los píxeles, y si mal no recuerdo se guarda con imagen:save(ruta). Revisa el source del CSBAW&CSBUG, que guardo avatares y userbars y son imágenes al fin y al cabo.
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 -_-
by jorge_97
ok, gracias ;)
Un saludo
Pues...
Cita de _Boujack_: "En ocaciones hago un screen.waitvblankstart(25) por que si no se ve fea la captura."
EDITO: Perdona, quería responderte al comentario de abajo pero me confundí de comentario xD Salu2.
By Jorge_97
Jajaja no pasa nada xD
Un saludo amigo
by jorge_97
Alguien sabe algo??
Salu2
prueba screen.clear() o
prueba screen.clear() o screen.waitVblankStart()
By Jorge_97
Gracias pero no creo que eso sirva
Salu2
screen.waitVBlankStart()
screen.waitVBlankStart() podría ayudarte.
by jorge_97
Para que??