8) hola hola!! soy yo nuevamente, esta vez con una duda, intenté hacer un efecto diluir o desaparicion de una imagen pixel por pixel, use map_clone, lo asigne a graph del proceso y excelente, lo puedo visualizar en pantalla pero cuando intento modificarlo con map_put_pixel no veo cambios xD ni del pixeles mas oscuros ni mas claros , inclusive usando un solo color no logré hacer la imagen monocromatica, estoy trabajando a 32bits!! será por eso?? alguien que me explique! la verdad ni idea xD ;D
homme .. asi a bote pronto sin ver el codigo ni idea xDDD
Quote from: KeoH on February 06, 2013, 06:35:28 PM
homme .. asi a bote pronto sin ver el codigo ni idea xDDD
bueh!! veamos si recuerdo un poco la logica del codigo ... tomando en cuenta que en 32bits map_get_pixel me retorna valores <0 en donde -1 es negro, ahi voy
process desintegrar(file,graph,x,y)
private
int newgraph,minx,miny,maxx,maxy,ancho,alto,pixx,pixy;
begin
newgraph=map_clone(file,graph);//capturo el grafico que en el momento tenga el proceso padre
ancho=graphic_info(file,newgraph,g_width);
alto=graphic_info(file,newgraph,g_height);
minx=x-(ancho/2);//conocer lado derecho del grafico
maxx=x+(ancho/2);//lado derecho de la imagen
miny=y-(alto/2);//conocer superior del grafico
maxy=y+(alto/2);//lado inferior de la imagen
for(pixx=minx;pixx<maxx;pixx++)
for(pixy=miny;pixy<maxy;pixy++)
if(abs(map_get_pixel(file,newgraph,pixx,pixy))>0) //si el valor absoluto mayor a cero
map_put_pixel(file,newgraph,pixx,pixy,-1);//pongo un punto negro
end //fin if
frame;//
end //fin for pixy
frame;//
end //fin for pixx
end//fin inicio
si no mas recuerdo asi es el codigo, claro fue una prueba a ver si lo lograba y en base a eso inventar nuevos efectos pixelados!! pero nah xD
una cosa, si no te has equivocado en los bucles ni en calcular los valores con alto y ancho y eso... puedes probar en vez de a poner menos uno o a calcular de esa manera, con rgba() o rgb()
Asi sabes si el fallo no essta en el menos uno... ahora pruebo a razonar tus operaciones, que estoy verde en mates xD
pd: ademas, no le veo sentido, porque a ti te puede funcionar el codigo como tu quieres xD, pero a otro no.
Quote from: alex on February 06, 2013, 09:35:59 PM
una cosa, si no te has equivocado en los bucles ni en calcular los valores con alto y ancho y eso... puedes probar en vez de a poner menos uno o a calcular de esa manera, con rgba() o rgb()
Asi sabes si el fallo no essta en el menos uno... ahora pruebo a razonar tus operaciones, que estoy verde en mates xD
pd: ademas, no le veo sentido, porque a ti te puede funcionar el codigo como tu quieres xD, pero a otro no.
niceee!! de hecho acabo de consultar la wiki , y sale que tambien puedes colocarte el parametro depth para saber si la operacion es a 32bits o 16 *o* hare pruebas con esa funcion!! si me sale algo bueno lo traigo para aca con esa funcion put pixel pueden hacerse muchisimas cosas, efectos de agua etc!! thank you!! 8) :P
seria algo como:
......
if( not( map_get_pixel(file,newgraph,pixx,pixy) == rgba(0,0,0,255) ) //si el valor absoluto mayor a cero
map_put_pixel(file,newgraph,pixx,pixy,rgba(0,0,0,255));//pongo un punto negro
end //fin if
.......
rgba() 1 valor de rojo, 2 valor de verde, 3 valor de azul, 4 valor de alfa (transparente==0, opaco==255). Todos de 0 a 255 el valor.
La funcion no se como va o si no existe en 16 bits. Solo he hecho pruebas con ella en 32 bits xD.
PD: te he puesto un igual a negro, porque lo que calculo es si eso no es verdad... Mas negro que el negro no hay nah xD.
nop, en 32bits debes asignar el valor a una variable usigned int... -1 es todo blanco, 0 es transparente, 1 o 2 o 3 es negro... (en realidad es transparente, ya que esos valores tienen alpha a 0)
si quieres ir diluyendo un grafico de 32bits, toca su alpha.
mmmmm!!! bueno lo de los numero negativos lo note en estos dias que estaba usando el codigo de gravedad ,use mapas de durezas con pisos en color rgba 255,0,0 guardadis en bmp 24bits porque el de 32bits el fpg me sale en blanco jejeje asi que use el bmp en 24bits, y cuando estaba haciendo la lectura de colores map_get_pixel me arrojaba -65536 en el caso del rojo 255,0,0 . acabo de hacer la prueba con la gravedad usando rgba y la prueba fue fallida!! haciendo la prueba sobre la gravedad, aun no hago la prueba sobre el grafico de desintegracion!! 8)
:o pensando creo que he dado en el punto, estoy trabajando con scroll, y estoy colocando los pixeles en puntos relativos a la posicion del objeto en el scroll, por lo que supongo ahora que jamas escribira pixelees sobre la imagen, si es map_put_pixel, el pixel 1 siempre sera 1 sin importar donde este el grafico dentro del scroll, siendo su pincel de ancho el que obtengamos por graphic_info sin sumarle o restarle otra variable, ya que x y estan siendo controlados por ctype=c_scroll, entonces si mi grafico es ancho 100 alto 100 por ejemplo, al hacer calculos basados en la x controlada por c_scroll jamas pintare dentro del mapa temporal creado con map_clone!!... ::) probare!! creo que estoy en lo correcto!! ;D
he conseguido pintar exitosamente sobre el mapa temporal a 32bits, creo que podre hacer algo interesante :D luego les paso un codigo!! me reciente teoria fue acertada!! ... las coordenadas x,y de la funcion map_put_pixel van orientadas a los pixeles del mapa, es decir de 0 al ancho y de 0 al alto sin importar si se dibuja en scroll o screen 8)
por eso se llama "map_*", disculpa que no te respondi antes, pero recien ahora con tu ultimo comentario entendi que querias decir... tu respuesta #8 no entendi nada que querias decir.
:o jeje siip!! se me hizo confuso explicarme, pero a la final lo logre!! ;D me estoy fumando ya una idea, esto me tiene contento!! ... luego voy por lo del scroll que comente en el otro hilo xD