elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Cambiar partes de un color definido hexadecimalmente.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar partes de un color definido hexadecimalmente.  (Leído 649 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Cambiar partes de un color definido hexadecimalmente.
« en: 16 Noviembre 2024, 04:08 am »



El 999999 en la derecha tiene botones encima y abajo, más o menos alineados con cada caracter. Los que están en su costado no vienen al caso. Quiero lograr que al presionar uno de esos botones, aumente o baje la cifra correspondiente. No entiendo mucho de cómo Flash "usa" los colores. Tengo:
ColorDelFondo = new Color("Fondo");
ColorDelFondo.setRGB(0x999999);
// Eso no se puede mostrar directo en texto,
// así que creo una variable:
ColorDelFondoB = "999999";

El objeto Fondo está puesto. Su color se establece bien, según lo que se ponga luego del set...

El cuadro de texto debería mostrar ColorDelFondo, pero si lo configuro así muestra la referencia al objeto, algo como "Objeto: Fondo". Tal vez funcione poner ColorDelFondo.setRGB, no probé ¿ideas? Igual esto es por rendimiento nomás.

Cuando se presione el botón encima del 1er 9, o lo que sea que haya en el momento, debe aumentar eso, si es posible. Lo mismo con el botón del 2ndo 9, etc, y los botones de abajo, para bajar las cantidades.

Sé que debo usar ifs para que el número no quede como -1 ni cosas extrañas, y quizá me conviene hacer algo así:
ColorDelFondo = 0x999999;
ColorDelObjetoFondo = new Color("Fondo");
ColorDelObjetoFondo.setRGB(ColorDelFondo);
...para simplificar, pero eso hace que en el texto se muestre un número más largo, no es hexadecimal.

Viendo la ayuda, dice algo así_
Código
  1. on(release) {
  2. ColorDelObjetoFondo = new Color("Objeto");
  3. ColorDelObjetoFondo.setRGB(parseInt(input, 16));
  4. }

¿Debo haberlo definido así?
ColorDelFondo = "999999";

¿y luego poner
Código
  1. on(release) {
  2. ColorDelObjetoFondo = new Color("Objeto");
  3. ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo, 16));
  4. }
?

Pero eso no modifica los valores. Imagino que conviene modificar los que no son un string, y luego pasar el valor a ColorDelFondo, convertido en string, para que se muestre como número de 6 cifras.

No sé bien cómo hacer todo eso xP ¿ideas?


« Última modificación: 16 Noviembre 2024, 04:12 am por Tachikomaia » En línea

EdePC
Moderador Global
***
Conectado Conectado

Mensajes: 2.176



Ver Perfil
Re: Cambiar partes de un color definido hexadecimalmente.
« Respuesta #1 en: 16 Noviembre 2024, 18:23 pm »

setRGB(n), donde n es un número, no importa en que base esté, puede ser Hexadecimal (0xAABBCC), entero (11189196), o el que prefieras. Se recomienda Hexadecimal para ver más clara la parte RRGGBB. Ojo que tiene que ser un número obviamente, no le vaya a dar un String o Texto sin querer.

Me parece que has utilizado un solo cuadro de texto que llamaré txt_rgb para de ahí tomar su valor que está dado en Hexadecimal, entonces te basta con:

ColorDelFondo = new Color(Fondo)
ColorDelFondo.setRGB( parseInt(txt_rgb,16) )


Suponiendo que el valor de txt_rgb es "AABBCC" primero hay que notar que es un String, para nada es un número por lo que hay que convertirlo, se hace con parseInt, a él le das un String y la Base numérica en la que está esa String y te devuelve el Número Entero correspondiente: 11189196 que es un Número válido y completamente equivalente a 0xAABBCC

---
Acá hice un pequeño proyecto en base a ese interesante enumerador rotatorio para cambiar color:



Proyecto FLA (Flash 5):
https://mega.nz/file/05pi1AIY#ZztDd6bOE8C1CzSNKO6nqG6KyLJgFdVXc6c9LJoRgaI

SWF (Flash 5):
https://mega.nz/file/QoZ2XRqJ#qnO_I9BoWZXNeQigW9v9M96NtKWv3Ta_Jj8ubiORGTI


En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Re: Cambiar partes de un color definido hexadecimalmente.
« Respuesta #2 en: 17 Noviembre 2024, 06:52 am »

Me parece que has utilizado un solo cuadro de texto que llamaré txt_rgb para de ahí tomar su valor que está dado en Hexadecimal, entonces te basta con:

ColorDelFondo = new Color(Fondo)
ColorDelFondo.setRGB( parseInt(txt_rgb,16) )
Pero no es una película, no tiene nombre. El nombre que se le da es en realidad la variable que muestra. Me funcionó así:
ColorDelObjetoFondo = new Color(Fondo)
ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo,16))

ColorDelFondo está definido en el texto, yo lo había definido en el frame pensando que era lo 1ero que se aplicaba y que si no estaba definido se iba a aplicar mal. Pero funciona, aparentemente 1ero las variables toman el valor de los textos y luego se aplica el código del frame.

Citar
"AABBCC" primero hay que notar que es un String, para nada es un número por lo que hay que convertirlo, se hace con parseInt, a él le das un String y la Base numérica en la que está esa String y te devuelve el Número Entero correspondiente: 11189196 que es un Número válido y completamente equivalente a 0xAABBCC
Interesante ¿si un texto tiene G y pongo base 17 también lo convierte a un número interpretando bien la idea o sólo funciona hasta 16? Con eso y la operación inversa podría resumir números largos... Me sirve si grabo datos de situaciones cuyos nombres están compuestos por las variables, ejemplo:
VidaPropia_VidaRival.GoodAction = 1
donde VidaPropia y VidaRival se sustituirán por números, imagina qué pasa entonces si la cantidad de variables fuese mucha... Nombres larguísimos. Aunque el separador debe estar, m.... ¿sabes una solución para esto?


Bueno, miro lo que hiciste, parece bien, aunque mi idea no era hacerlo rotatorio, sino que si uno quiere verde al máximo por ejemplo hace clics hasta ver que ocurrió. Si es rotatorio habría que presionar el botón contrario luego o volver a presionar varias veces el mismo botón...

Fua, está difícil, y la idea es entenderlo no simplemente copiarlo. Intentaré entendero y comento mis dudas. El botón más derecho dice:
Código
  1. on (release) {
  2.  if ( hex2int(n) + 1 > 15 ) {
  3.    n = 0
  4.  } else {
  5.    n = int2hex(hex2int(n) + 1)
  6.  }
  7.  c = new Color(_root.cuadro)
  8.  c.setRGB(hex2int(_root.R1.n + _root.R2.n + _root.G1.n + _root.G2.n + _root.B1.n + _root.B2.n))
  9. }
O sea, al presionarlo se usa esto:
Código:
function hex2int(h) {
  return parseInt(h,16)
}
Del texto ¿separado? m... Buena idea supongo, aunque luego debes concatenarlo. Bueno, copiaré lo de tenerlo separado. Del trozo de texto hexadecimal obtienes su valor convertido a número.

Si al sumarle 1 resulta más de 15, lo vuelves 0.
sino al texto lo transformas con esto:
Código:
function int2hex(i) {
  return (i).toString(16).toUpperCase()
}
Lo cual es obtener, de lo que hiciste antes, el resultado de convertirlo a texto en base 16 y en mayúscula.
O sea, eso es necesario si es un número, si es A~F no, supongo.
Y le sumas 1.
Edit: No, al revés, es necesario sólo si es un texto.

Luego concatenando asignas el color al cuadro... Bien, creo que lo entendí, lo aplicaré, aunque mi plan incluye botones para asignar colores directamente, y si el texto está separado habrá que distribuir en él las variables. Está bien, sólo que buscaba algo más matemático, como que el botón más derecho sumara al número de a 1, el siguiente botón hacia la izquierda sumara de a, no sé ¿16? De hecho tu sistema no implica que aumentar 1 al último valor de un color, pueda aumentar el anterior, como tenía pensado, por ejemplo si se tiene:
00FFEF
presionar el último debería causar 00FFF0 porque sumas 1 al color azul que era ponele 250. Voy a probar 3 textos en vez de 6 a ver si sale.
« Última modificación: 17 Noviembre 2024, 06:58 am por Tachikomaia » En línea

Tachikomaia


Desconectado Desconectado

Mensajes: 1.460


Hackentifiko!


Ver Perfil
Re: Cambiar partes de un color definido hexadecimalmente.
« Respuesta #3 en: 19 Noviembre 2024, 05:01 am »

Con tu ayuda y la de GPT lo hice.

Usando estas funciones:
Código
  1. function ConvertirHexEnDec (Hexadecimal) {
  2.    return parseInt(Hexadecimal, 16);
  3. }
  4. function ConvertirDecEnHex (Decimal) {
  5.    Hexadecimal = Decimal.toString(16).toUpperCase();
  6. if (Hexadecimal.length == 1) {
  7. Hexadecimal = "0"+Hexadecimal;
  8. }
  9. return Hexadecimal;
  10. }
  11. function ActualizarColorDelFondo () {
  12. // Formar el color:
  13. ColorDelFondo = Rojo+Verde+Azul;
  14. // Actualizar el color del objeto:
  15. ColorDelObjetoFondo.setRGB(parseInt(ColorDelFondo, 16));
  16. }

Y por ejemplo el botón azul de +1:
Código
  1. on (release) {
  2. // Del color obtener la parte a modificar:
  3. Azul = ColorDelFondo.substr(4, 2);
  4. // Convertirla en decimal:
  5. Azul = ConvertirHexEnDec(Azul);
  6. // Se aumenta 1 a esa parte y si supera 255 queda en 255:
  7. Azul = Math.min(Azul+1, 255);
  8. // Convertirlo en hexadecimal:
  9. Azul = ConvertirDecEnHex(Azul);
  10. // Obtener las otras partes:
  11. Rojo = ColorDelFondo.substr(0, 2);
  12. Verde = ColorDelFondo.substr(2, 2);
  13. ActualizarColorDelFondo ()
  14. }

Cada botón es un poco distinto pero se entiende la idea.

Hace años lo hice poniendo que si el valor era "A" pasaba a "B", que si era "B" pasaba a "C", etc, un lío, por eso quería hacerlo mejor.

Acá está:
Código
  1. on (release) {
  2.    _root.CFModo = 0;
  3.    _root.CPartB = _root.Fondo.substring( 5, 6 );
  4.    _root.CPartA = _root.Fondo.substring(4, 5);
  5.    if (_root.CPartB == "F") {
  6.        // Aumenta el primer dígito.
  7.        if (_root.CPartA == "F") {
  8.        } else {
  9.            _root.CPartB = "0";
  10.            if (_root.CPartA == "E") {
  11.                _root.CPartA = "F";
  12.            } else if (_root.CPartA == "D") {
  13.                _root.CPartA = "E";
  14.            } else if (_root.CPartA == "C") {
  15.                _root.CPartA = "D";
  16.            } else if (_root.CPartA == "B") {
  17.                _root.CPartA = "C";
  18.            } else if (_root.CPartA == "A") {
  19.                _root.CPartA = "B";
  20.            } else if (_root.CPartA == "9") {
  21.                _root.CPartA = "A";
  22.            } else if (_root.CPartA == "8") {
  23.                _root.CPartA = "9";
  24.            } else if (_root.CPartA == "7") {
  25.                _root.CPartA = "8";
  26.            } else if (_root.CPartA == "6") {
  27.                _root.CPartA = "7";
  28.            } else if (_root.CPartA == "5") {
  29.                _root.CPartA = "6";
  30.            } else if (_root.CPartA == "4") {
  31.                _root.CPartA = "5";
  32.            } else if (_root.CPartA == "3") {
  33.                _root.CPartA = "4";
  34.            } else if (_root.CPartA == "2") {
  35.                _root.CPartA = "3";
  36.            } else if (_root.CPartA == "1") {
  37.                _root.CPartA = "2";
  38.            } else if (_root.CPartA == "0") {
  39.                _root.CPartA = "1";
  40.            }
  41.        }
  42.        // Aumenta el segundo dígito.
  43.    } else if (_root.CPartB == "E") {
  44.        _root.CPartB = "F";
  45.    } else if (_root.CPartB == "D") {
  46.        _root.CPartB = "E";
  47.    } else if (_root.CPartB == "C") {
  48.        _root.CPartB = "D";
  49.    } else if (_root.CPartB == "B") {
  50.        _root.CPartB = "C";
  51.    } else if (_root.CPartB == "A") {
  52.        _root.CPartB = "B";
  53.    } else if (_root.CPartB == "9") {
  54.        _root.CPartB = "A";
  55.    } else if (_root.CPartB == "8") {
  56.        _root.CPartB = "9";
  57.    } else if (_root.CPartB == "7") {
  58.        _root.CPartB = "8";
  59.    } else if (_root.CPartB == "6") {
  60.        _root.CPartB = "7";
  61.    } else if (_root.CPartB == "5") {
  62.        _root.CPartB = "6";
  63.    } else if (_root.CPartB == "4") {
  64.        _root.CPartB = "5";
  65.    } else if (_root.CPartB == "3") {
  66.        _root.CPartB = "4";
  67.    } else if (_root.CPartB == "2") {
  68.        _root.CPartB = "3";
  69.    } else if (_root.CPartB == "1") {
  70.        _root.CPartB = "2";
  71.    } else if (_root.CPartB == "0") {
  72.        _root.CPartB = "1";
  73.    }
  74.    _root.Fondo = _root.Fondo.substring( 0, 4) + _root.CPartA + _root.CPartB;
  75.    ColF = new Color(_root.Fondoimg);
  76.    ColF.setRGB(parseInt(_root.Fondo, 16));
  77. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No se ha definido el tipo definido por el usuario. (error, ayudenme plz)
Programación Visual Basic
Sancho.Mazorka 2 7,651 Último mensaje 3 Enero 2006, 09:35 am
por Sancho.Mazorka
cambiar el color
Desarrollo Web
bengy 0 1,920 Último mensaje 28 Octubre 2016, 00:56 am
por bengy
[VBA]Error definido por la aplicación o definido por el objeto Al Usar Cells()
Dudas Generales
Mastodonte 1 3,270 Último mensaje 23 Octubre 2017, 13:56 pm
por Serapis
Cambiar color del texto por partes
Programación C/C++
Syrax 1 3,798 Último mensaje 2 Mayo 2018, 08:10 am
por master_1999
Cambiar color c++
Programación C/C++
Pool9 0 1,820 Último mensaje 3 Mayo 2018, 05:35 am
por Pool9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines