como averiguo el codigo de un color?

Started by shaoo, September 25, 2009, 09:31:13 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

shaoo

hola,he creado un mapa de durezas,y ahora me gustaria averiguar el codigo de color con el que he pintado las zonas por las que no
se podria caminar.pero no se como se obtiene dicho codigo, con el photoshop?
gracias

DCelso

Podrias usar el photoshop, pero con código bennu sería lo siguiente:

mapa_durezas=load_png("miimagen.png");
color_no_transitable=map_get_pixel(0,mapa_durezas,x,y);

Donde x e y son las coordenadas de un pixel que sepas que tiene el  color que quieres usar como no transitable.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

Los mapas de durezas es mejor hacerlos SIEMPRE en 8bits, así sabes que no te confundes, sabes que los 256 colores siempre son los mismos.
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)

DjSonyk

Buenas:

Me imagino que se te olvido apuntar el codigo del color?
Puedes hacerlo atraves de casi cualquier programa de dibujo que muestre las paletas como por ejemplo Idraw que viene en el paquete
1.7 de Bennu,otra forma es crear una rutina que te valla leyendo el codigo de los pixels y te lo muestre en pantalla y lo apuntas,algo asi
/*****************************
Write(Arial,5,10,0,"Color selecionado:");
Write_Int(Arial,100,10,0,&Color_Puntero);

File=Fichero_Grafico_Raton;
Graph=Grafico_Raton;
Repeat   
    X=mouse.x;
    Y=mouse.y;
    Color_Puntero=Map_Get_Pixel(Fichero_Mapa_Durezas,Codigo_Mapa_Durezas,X,Y);
    Frame;
END
****************************/
Por supuesto que es mejor y mas rapido que uses un programa especifico.

Prg

#4
el código de color en 32 bits es azulverderojo en hexadecimal 0FFFFFFh

por ejemplo el color

rojo 255
verde 100
azul 10

el color sería:
0A64FFh

en 16 bits es otro asunto, y en 8 bits más distinto.

pero con map_get_pixel y un programita que tu te hagas puedes saber exactamente qué color está en cierta posición.
donde rojo es la cantidad de rojo del color 0-255 ...

además te recomiendo que uses rgb(rojo,azul,verde) para comparar ya que algunas tarjetas de video cambian los códigos del color.


sería algo así como:

piso=rgb(rojo,verde,azul);

...

if (map_get_pixel(.....)==piso)
     y-=gravedad...
end
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

0ffffffh en 32bits es un blanco total con el alpha completamente transparente...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

#6
También es habitual usar la mitad de resolución para el mapa de durezas, ganando así velocidad y espacio de memoria y apenas se nota la pérdida de precisión. Siempre que accedamos al mapa de durezas dividiremos por dos y llisto.
El código quedaría tal que así

mapa_durezas=load_png("miimagen.png");
color_no_transitable=map_get_pixel(0,mapa_durezas,x/2,y/2);
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

#7
Oooohhh, eso me recuerda que ahora que trabajo a full 32 bits todavia no he probado el map_get_pixel ( ) en mapas con 32 bits... Lo probare aunque seguramente acabe metiendo las durezas en un FPG de 8 bits... Es de esperar que con 256 codigos de dureza distintos tenga suficiente xDDD

EDIT: Por supuesto, ademas de el/los mapa de durezas siempre mantengo un grafico adicional (Numerado con 999) con la referencia de colores de dureza usados, un color por pixel (Mapa minusculo). Nada mas comenzar la ejecucion hago map_get_pixel sobre la referencia y guardo los distintos colores en variables:

durezas[_SUELO] = map_get_pixel ( file , 999 , 0 , 0 );
durezas[_TECHO] = map_get_pixel ( file , 999 , 1 , 0 );
durezas[_PARED] = map_get_pixel ( file , 999 , 2 , 0 );
...

La referencia de colores la edito con Paint, aunque lo que dice DJSonyk de la paleta tambien parece igual de valido. Cada uno tiene sus formas de trabajar y las usa siempre, si alguien encuentra algo mejor... Le devolvemos el dinero y ya esta :-*
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Lo de los colores de las durezas, lo mismo que haces con una imagen aparte, se suele hacer en la misma imagen del mapa de durezas en una sección no visible, por ejemplo haciendolo una columna o fila mas largo y poniendo allí los colores.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Sí, pero como puedo tener varios background diversos e incluso cambiar unos por otros prefiero tener la referencia fija. Cuestión de costumbres, soy un animal de costumbres xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DjSonyk

¿Espacio de Memora?¿Eso que es lo que es? ¡¡¡?¿?¡?¿?!!!

DCelso

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Quote¿Espacio de Memora?¿Eso que es lo que es? ¡¡¡?¿?¡?¿?!!!

Cuando usas durezas tienes el scroll que "muestras" en pantalla y el scroll con los colores de durezas para suelo, techo, pared, etc.

Tener ambos cargado supone Mb de RAM consumidos... Es posible mantener un mapa de durezas con la mitad de resolución del escenario y chequearlo con una "pérdida de precisión" que no suele suponer mucho...

El resultado es una menor carga de Mb de RAM consumidos y un poco más de CPU consumida por las divisiones que hay que hacer para determinar el cálculo... Las divisiones entre 2 en binario suponen un simple shift pero las divisiones entre 3 y otros números impares implican varios ciclos de CPU, así que OJO!!!

Lo escribo de tirón, pero... Es cierto xD
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es