Código RGB a HEX código de conversión, la necesidad de que la velocidad!

  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 8:40 pm

Hay un yo escribió el código que convierte de 256 bits de código de color RGB en hexadecimal para utilizar con las líneas y tal, pero tengo un problema...es maldito lento...

Soy consciente de la transformación de código de conversión RGB que es algo así como:

mcColor.getRGB (). toString (16);

, que es mucho más rápido, pero el uso es limitado...

No entiendo la matemática de la hexagonal muy bien, así que si alguien tiene conocimiento de conversión de números de más de nueve de sus respectivas cartas bits entonces estoy seguro de que se acelerará como loco...

Esto es lo que tengo ahora mismo, si alguien puede pensar de cualquier manera inteligente de reducir un poco más abajo Lemmie saber...


Código: [ Select ]
function rgb2hex(rgb1,rgb2,rgb3){
//1 is r, 2 is g, 3 is b, variables are named liie that for less processing...
for(var i=1;i<=3;i++){
//divide number
rgb=eval('rgb' add i);
if(rgb!=0){
rgb=rgb/16;
//split it
rgb=String(rgb);
this['split_rgb'+i] = rgb.split(".");
//check if it is an integer
if(this['split_rgb'+i].length==1)this['split_rgb'+i]=this['split_rgb'+i].concat(0);
}else{
this['split_rgb'+i] = [0,0];
}
//strip any pre zeros (though there is only one floating number that begins with a 0 that i am aware of).
stripzeros = String(this['split_rgb' + i][1]);
if(stripzeros.length>1 and stripzeros.charAt(0) == 0){
stripzeros=stripzeros.substr(1);
this['split_rgb' + i][1] = stripzeros;
}
//multiply the float
this['split_rgb' + i][1]=this['split_rgb' + i][1]*16;
//slice where the 0's begin
rgblength = String(this['split_rgb' + i][1]);
rgblength = rgblength.slice(rgblength.indexOf("0"));
//divide according to the amount of 0's
if(rgblength.length==1)this['split_rgb' + i][1]=this['split_rgb' + i][1]/10;
if(rgblength.length==2)this['split_rgb' + i][1]=this['split_rgb' + i][1]/100;
if(rgblength.length==3)this['split_rgb' + i][1]=this['split_rgb' + i][1]/1000;
if(rgblength.length==4)this['split_rgb' + i][1]=this['split_rgb' + i][1]/10000;
//set numbers 10-15 to a-f for hex recognition
for(var j=0;j<=1;j++){
if(this['split_rgb' + i][j]==10)this['split_rgb' + i][j]='a';
if(this['split_rgb' + i][j]==11)this['split_rgb' + i][j]='b';
if(this['split_rgb' + i][j]==12)this['split_rgb' + i][j]='c';
if(this['split_rgb' + i][j]==13)this['split_rgb' + i][j]='d';
if(this['split_rgb' + i][j]==14)this['split_rgb' + i][j]='e';
if(this['split_rgb' + i][j]==15)this['split_rgb' + i][j]='f';
}
}
//trace(this.split_rgb1[0] add this.split_rgb1[1] add ", " add this.split_rgb2[0] add this.split_rgb2[1] add ", " add this.split_rgb3[0] add this.split_rgb3[1]);
return '0x' add this.split_rgb1[0] add this.split_rgb1[1] add this.split_rgb2[0] add this.split_rgb2[1] add this.split_rgb3[0] add this.split_rgb3[1];
}
  1. function rgb2hex(rgb1,rgb2,rgb3){
  2. //1 is r, 2 is g, 3 is b, variables are named liie that for less processing...
  3. for(var i=1;i<=3;i++){
  4. //divide number
  5. rgb=eval('rgb' add i);
  6. if(rgb!=0){
  7. rgb=rgb/16;
  8. //split it
  9. rgb=String(rgb);
  10. this['split_rgb'+i] = rgb.split(".");
  11. //check if it is an integer
  12. if(this['split_rgb'+i].length==1)this['split_rgb'+i]=this['split_rgb'+i].concat(0);
  13. }else{
  14. this['split_rgb'+i] = [0,0];
  15. }
  16. //strip any pre zeros (though there is only one floating number that begins with a 0 that i am aware of).
  17. stripzeros = String(this['split_rgb' + i][1]);
  18. if(stripzeros.length>1 and stripzeros.charAt(0) == 0){
  19. stripzeros=stripzeros.substr(1);
  20. this['split_rgb' + i][1] = stripzeros;
  21. }
  22. //multiply the float
  23. this['split_rgb' + i][1]=this['split_rgb' + i][1]*16;
  24. //slice where the 0's begin
  25. rgblength = String(this['split_rgb' + i][1]);
  26. rgblength = rgblength.slice(rgblength.indexOf("0"));
  27. //divide according to the amount of 0's
  28. if(rgblength.length==1)this['split_rgb' + i][1]=this['split_rgb' + i][1]/10;
  29. if(rgblength.length==2)this['split_rgb' + i][1]=this['split_rgb' + i][1]/100;
  30. if(rgblength.length==3)this['split_rgb' + i][1]=this['split_rgb' + i][1]/1000;
  31. if(rgblength.length==4)this['split_rgb' + i][1]=this['split_rgb' + i][1]/10000;
  32. //set numbers 10-15 to a-f for hex recognition
  33. for(var j=0;j<=1;j++){
  34. if(this['split_rgb' + i][j]==10)this['split_rgb' + i][j]='a';
  35. if(this['split_rgb' + i][j]==11)this['split_rgb' + i][j]='b';
  36. if(this['split_rgb' + i][j]==12)this['split_rgb' + i][j]='c';
  37. if(this['split_rgb' + i][j]==13)this['split_rgb' + i][j]='d';
  38. if(this['split_rgb' + i][j]==14)this['split_rgb' + i][j]='e';
  39. if(this['split_rgb' + i][j]==15)this['split_rgb' + i][j]='f';
  40. }
  41. }
  42. //trace(this.split_rgb1[0] add this.split_rgb1[1] add ", " add this.split_rgb2[0] add this.split_rgb2[1] add ", " add this.split_rgb3[0] add this.split_rgb3[1]);
  43. return '0x' add this.split_rgb1[0] add this.split_rgb1[1] add this.split_rgb2[0] add this.split_rgb2[1] add this.split_rgb3[0] add this.split_rgb3[1];
  44. }
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Febrero 19th, 2004, 8:40 pm

  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 19th, 2004, 9:12 pm

¿Estás tratando de lograr algo como esto?

http://www.lostinbeta.com/kirupa/getRandomHex.html

http://www.lostinbeta.com/kirupa/colorSlider.html

???

Si es así, me sacó fuera de estas usando algo como esto...
Código: [ Select ]
function rgb2hex(r, g, b) {
    col = new Color(this);
    col.setRGB(r << 16 | g << 8 | b);
    return col.getRGB().toString(16).toUpperCase();
}
trace(rgb2hex(144, 55, 243));
  1. function rgb2hex(r, g, b) {
  2.     col = new Color(this);
  3.     col.setRGB(r << 16 | g << 8 | b);
  4.     return col.getRGB().toString(16).toUpperCase();
  5. }
  6. trace(rgb2hex(144, 55, 243));
(aproximadamente, no código exacto, la idea básica justa...No me siento como la búsqueda de la flas. Para código real...jeje)


Y utilizan el mismo método que se menciona en su post anterior, pero no puedo decir como es limitado, siempre ha trabajado A-OK para mí: - \
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 9:33 pm

limitada en el sentido de que sólo funciona si está usando un MC de transformar el color de...

Le mencioné que yo ya soy consciente de la conversión de cadenas.

Tengo una pregunta Tho, ¿cuál es esta línea haciendo?

col. setRGB (r <<16 | g <<8 | b);

existen métodos de coloración y las líneas de texto usando la función toString, pero quiero crear algo independiente de este...También planean i en usarlo en algo más que flash...

ACCUALLY lo que ocurrió antes de que este código se->

Código: [ Select ]
function rgb2hex(r,g,b){
var color = new Color(this);
color.setTransform({ra: r*(100/255), rb: r, ga: g*(100/255), gb: g, ba: b*(100/255), bb: b, aa: 100, ab: 255});
return '0x' add color.getRGB().toString(16);
}
trace(rgb2hex(255,0,255));
  1. function rgb2hex(r,g,b){
  2. var color = new Color(this);
  3. color.setTransform({ra: r*(100/255), rb: r, ga: g*(100/255), gb: g, ba: b*(100/255), bb: b, aa: 100, ab: 255});
  4. return '0x' add color.getRGB().toString(16);
  5. }
  6. trace(rgb2hex(255,0,255));


Creo que su
Código: [ Select ]
col.setRGB(r << 16 | g << 8 | b);

línea es hacer lo que mi
Código: [ Select ]
color.setTransform({ra: r*(100/255), rb: r, ga: g*(100/255), gb: g, ba: b*(100/255), bb: b, aa: 100, ab: 255});


está haciendo...

parece un solución más rápida a mi método de transformación, pero menos cambiante...

definitivamente un mejor método si sólo cambio de colores, thnx por eso.
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 9:40 pm

Hmm, su

r <<16 | g <<8 | b

podría ser mi héroe hombre...:D

i gotta lío en torno a saber que algunos más...TNX de nuevo
  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 19th, 2004, 9:41 pm

<<Es una mierda izquierda bitwise

| Bitwise es un "o"

Su tipo de confusión a explicar, usted debe ser capaz de verificar a cabo en el diccionario de actionscript para obtener más información.

No tengo mucho tiempo en mis manos, pero voy a ver si puedo cifra algo.
  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 19th, 2004, 9:47 pm

Código: [ Select ]
function rgb2hex(r, g, b) {
    return String(r.toString(16)+g.toString(16)+b.toString(16)).toUpperCase();
}
trace(rgb2hex(143, 55, 233));
  1. function rgb2hex(r, g, b) {
  2.     return String(r.toString(16)+g.toString(16)+b.toString(16)).toUpperCase();
  3. }
  4. trace(rgb2hex(143, 55, 233));


No Color () de objetos utilizados en esta ocasión....
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 9:53 pm

Aceptar el <<y>> son las operaciones bit a bit...No tengo idea de qué demonios lo hace, pero appare notly estos operadores de cambio de código binario...No sé a Jack de no binarios, pero tengo curiosidad por si se pudiera que me lo explique...


no hay una cosa que no entiendo, ¿por qué tengo que configurar la U RGB en el primer lugar? ¿No podemos tomar esa Sal de la ecuación de todos juntos con algo como:

Código: [ Select ]
function rgb2hex(r,g,b){
var color=(r << 16 | g << 8 | b);
return '0x' add color.toString(16);
}
  1. function rgb2hex(r,g,b){
  2. var color=(r << 16 | g << 8 | b);
  3. return '0x' add color.toString(16);
  4. }

lo que está pasando aquí?

¿Qué significa el código de setRGB hacer?

Esto es muy eficiente, weve eliminado todas las funciones en este ejemplo,...
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 9:55 pm

Parece que hemos elaborado códigos similares, pero usted gana-_-line es un hombre dulce...
  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 19th, 2004, 10:00 pm

Me gustaría poder explicar, pero como he dicho antes de su muy complicado, me wouldnt ser capaces de explicar bien claro lo suficiente para dar sentido a nada.

Una cosa me puede ayudar con pesar, i con su uso de "añadir". El uso de "añadir" para combinar las cuerdas es la sintaxis de Flash 4, puede utilizar un símbolo "+" para conectar las cadenas ahora :)


Y en una nota lado, el código que publicó obras de la misma como el código en mi anterior post antes de que.... color objeto no requiere declaración ;) (como siempre hago las cosas difíciles a mí mismo, dado que su código es en realidad más eficiente >
  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 19th, 2004, 10:01 pm

elibol escribió:
Parece que hemos producido códigos similares, pero de ganar-_-una línea es dulce hombre...


Sí lo hicimos, y el tuyo puede ser una línea demasiado ;)
Código: [ Select ]
function rgb2hex(r, g, b) {
    return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
}
  1. function rgb2hex(r, g, b) {
  2.     return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
  3. }
(nótese que sigo usando toUpperCase (), prefiero que mis códigos hexadecimales para ser convertida por escrito, pero thats una preferencia personal),
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 10:01 pm

props a su rápido maquillaje, pero su código está viciado...si la figura de una línea de solución thatd ser grande, en el ínterin se i figura esta out =]

TNX
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 10:05 pm

He intentado, pero que por alguna razón no funcionó cuando lo hice...extraño eh? thnx hombre...

la mayúscula es una función innecesaria, al parecer para producir el resultado, independientemente...se retardarlo en flash, puede ser necesario en otro código, sin embargo, i donno...

donno todavía por qué su original solución no funciona bien
  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 19th, 2004, 10:08 pm

Mi solución original produce todos los mismos resultados que la segunda solución...para mí al menos: - \

Oh bien, independientemente de las obras ;)
  • elibol
  • Novice
  • Novice
  • No Avatar
  • Registrado: Feb 19, 2004
  • Mensajes: 29
  • Status: Offline

Nota Febrero 19th, 2004, 10:18 pm

Bueno, ahora veo que la solución no encaja con este otro código que escribió, tal vez u me puede ayudar con eso también, tiene un espectro de todos los colores...

Código: [ Select ]
function spectrum(maxlength, currval){
var curcol=int((1275/maxlength)*currval);
if(curcol>=0 and curcol<255){
r=255;
g=curcol;
b=0;
}
if(curcol>255 and curcol<510){
r=255-(curcol-255);
g=255;
b=0;
}

if(curcol>510 and curcol<765){
r=0;
g=255;
b=(curcol-510);
}

if(curcol>765 and curcol<1020){
r=0;
g=255-(curcol-765);
b=255;
}

if(curcol>1020 and curcol<=1275){
r=(curcol-1020);
g=0;
b=255;
}
return rgb2hex(r,g,b);
}
  1. function spectrum(maxlength, currval){
  2. var curcol=int((1275/maxlength)*currval);
  3. if(curcol>=0 and curcol<255){
  4. r=255;
  5. g=curcol;
  6. b=0;
  7. }
  8. if(curcol>255 and curcol<510){
  9. r=255-(curcol-255);
  10. g=255;
  11. b=0;
  12. }
  13. if(curcol>510 and curcol<765){
  14. r=0;
  15. g=255;
  16. b=(curcol-510);
  17. }
  18. if(curcol>765 and curcol<1020){
  19. r=0;
  20. g=255-(curcol-765);
  21. b=255;
  22. }
  23. if(curcol>1020 and curcol<=1275){
  24. r=(curcol-1020);
  25. g=0;
  26. b=255;
  27. }
  28. return rgb2hex(r,g,b);
  29. }


que se ejecuta como esta:
Código: [ Select ]
for(var i=1;i<=500;i++){
attachMovie('colorme', 'colorme'+i,i,{_y:0,_x:i});
mcColor = new Color(this['colorme'+i]);
mcColor.setRGB(spectrum(500,this['colorme'+i]._x));
};
  1. for(var i=1;i<=500;i++){
  2. attachMovie('colorme', 'colorme'+i,i,{_y:0,_x:i});
  3. mcColor = new Color(this['colorme'+i]);
  4. mcColor.setRGB(spectrum(500,this['colorme'+i]._x));
  5. };


colorme es un vinculados MC que es un bloque thats 1x10 en la dimensión...

Estoy casi seguro de que hay un método mejor para esto también, pero, yo no conozco a nadie...

Asimismo, si la cifra de U por qué esto funciona:
Código: [ Select ]
function rgb2hex2(r, g, b) {
return '0x' + r.toString(16)+g.toString(16)+b.toString(16);
}
  1. function rgb2hex2(r, g, b) {
  2. return '0x' + r.toString(16)+g.toString(16)+b.toString(16);
  3. }


cuando traza el segundo produce un color hexagonal válido...pero por alguna razón no produce el espectro de...todo está desordenado...tnx 4 ur ayuda


Lemmie saber lo que el DIL es si u figure it out =]
  • lostinbeta
  • Guru
  • Guru
  • Avatar de Usuario
  • Registrado: Jun 26, 2003
  • Mensajes: 1402
  • Loc: Philadelphia, PA
  • Status: Offline

Nota Febrero 20th, 2004, 3:25 pm

"Lo lamento, pero no parecen estar recibiendo algún error con la función...
Código: [ Select ]
function rgb2hex(r, g, b) {
    return '0x'+(r << 16 | g << 8 | b).toString(16);
}
function spectrum(maxlength, currval) {
    var curcol = int((1275/maxlength)*currval);
    if (curcol>=0 and curcol<255) {
        r = 255;
        g = curcol;
        b = 0;
    }
    if (curcol>255 and curcol<510) {
        r = 255-(curcol-255);
        g = 255;
        b = 0;
    }
    if (curcol>510 and curcol<765) {
        r = 0;
        g = 255;
        b = (curcol-510);
    }
    if (curcol>765 and curcol<1020) {
        r = 0;
        g = 255-(curcol-765);
        b = 255;
    }
    if (curcol>1020 and curcol<=1275) {
        r = (curcol-1020);
        g = 0;
        b = 255;
    }
    return rgb2hex(r, g, b);
}
for (var i = 1; i<=500; i++) {
    attachMovie('colorme', 'colorme'+i, i, {_y:0, _x:i});
    mcColor = new Color(this['colorme'+i]);
    mcColor.setRGB(spectrum(500, this['colorme'+i]._x));
}
  1. function rgb2hex(r, g, b) {
  2.     return '0x'+(r << 16 | g << 8 | b).toString(16);
  3. }
  4. function spectrum(maxlength, currval) {
  5.     var curcol = int((1275/maxlength)*currval);
  6.     if (curcol>=0 and curcol<255) {
  7.         r = 255;
  8.         g = curcol;
  9.         b = 0;
  10.     }
  11.     if (curcol>255 and curcol<510) {
  12.         r = 255-(curcol-255);
  13.         g = 255;
  14.         b = 0;
  15.     }
  16.     if (curcol>510 and curcol<765) {
  17.         r = 0;
  18.         g = 255;
  19.         b = (curcol-510);
  20.     }
  21.     if (curcol>765 and curcol<1020) {
  22.         r = 0;
  23.         g = 255-(curcol-765);
  24.         b = 255;
  25.     }
  26.     if (curcol>1020 and curcol<=1275) {
  27.         r = (curcol-1020);
  28.         g = 0;
  29.         b = 255;
  30.     }
  31.     return rgb2hex(r, g, b);
  32. }
  33. for (var i = 1; i<=500; i++) {
  34.     attachMovie('colorme', 'colorme'+i, i, {_y:0, _x:i});
  35.     mcColor = new Color(this['colorme'+i]);
  36.     mcColor.setRGB(spectrum(500, this['colorme'+i]._x));
  37. }


Todo funciona bien para mí: - \ A menos por supuesto que no tiene problemas, simplemente preguntando en una forma más eficiente?



En cuanto a por qué el mío no funciona...ni idea, pero no importa, porque como he dicho antes, la mía es la menos eficiente una ;)
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Febrero 20th, 2004, 3:25 pm

Publicar Información

  • Total de mensajes en este tema: 20 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 30 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC