
Definicion de colores por pixeles
#21
Posted 07 March 2012 - 02:01 PM
Ahora veo mas numeros, 6, los primeros me dan la impresion de que son porcentajes.
Que son los otros ?.
Saludos
#22
Posted 07 March 2012 - 02:06 PM
Hola
Ahora veo mas numeros, 6, los primeros me dan la impresion de que son porcentajes.
Que son los otros ?.
Saludos
El valor RGB del color que se colocó.
Saludos
#23
Posted 07 March 2012 - 02:11 PM
Pense lo mismo pero si pones:
showMessage( format('Color RGB (%f,%f,%f)',[r1,g1,b1]) );
Sale: 85, 170, 130
Pero si pongo:
showMessage( format('Color RGB (%f,%f,%f)',[r,g,b]) );
Me sale: 33, 33, 66. 67, 50, 98.
Por que la diferencia si los tres ultimos son el rgb ?.
Saludos
#24
Posted 07 March 2012 - 02:15 PM
procedure ColorAnalizator(Bitmap: TBitmap; var rr, gg, bb: Extended); var l, x: integer; P: PByte; r, g, b, T: Extended; begin r:=0; g:=0; b:=0; for l := 0 to Bitmap.Height - 1 do begin P := Bitmap.ScanLine[l]; x:=0; repeat b:= b+P^; inc(P); g:= g+P^; inc(P); r:= r+P^; inc(P); inc(x); until x = Bitmap.Width; end; T:= r+g+b;//Bitmap.Height*Bitmap.Width*255; if T = 0 then exit; rr:= (r / T)*100; gg:= (g / T)*100; bb:= (b / T)*100; end;
Si queremos el tanto por uno, es decir que entre todos sumen uno, pues evitamos la multiplicación por 100.
Subo un programilla de ejemplo muy básico.
Saludos.
#25
Posted 07 March 2012 - 02:25 PM
85,170,130 es el valor RGB
33.33, 66.67, 50.98 son los porcentajes de saturación como lo indica escafandra.
Saludos
#26
Posted 07 March 2012 - 02:27 PM
Muy bueno amigo, excelente

Lo que me parece muy curioso es que solo sean tres colores el RGB.
En el pantone tengo muchos mas, osea, tengo muchos tintes de diferentes colores que se mezclan para crear otro.
Por que sera ?.
saludos
PD: Gracias Eliseo por la aclaración me sirve mucho.

#27
Posted 07 March 2012 - 02:36 PM
Hola
Muy bueno amigo, excelente, ahora tengo que ver como puede resolver el asunto este de los porcentajes.
Lo que me parece muy curioso es que solo sean tres colores el RGB.
En el pantone tengo muchos mas, osea, tengo muchos tintes de diferentes colores que se mezclan para crear otro.
Por que sera ?.
saludos
PD: Gracias Eliseo por la aclaración me sirve mucho.
Si te fijas, las impresoras de color sólo tienen 3 colores básicos con los que se crean todos los colores, si no me equivoco son Cyan, Magenta y Amarillo.
Es el mismo concepto de RGB, tres colores base con los que se juega para crear toda la gama de colores.
Saludos
#28
Posted 07 March 2012 - 02:49 PM
No creo que una función te pueda convertir DIRECTAMENTE entre RGB y Pantone.
Con el sistema RGB a 24bits tienes tres vectores con 256 tonos posibles cada uno, es decir, 256*256*256=256^3 colores posibles, son mas de 16 millones de combinaciones las que puedes formar, más combinaciones de las que el ojo humano puede distinguir.
El sistema pantone no tiene tantos tonos, son muy pocos, tanto así que hasta les han puesto nombre a cada uno.
Es decir son un pequeño subconjunto de los tonos que hay en RGB de 24bits.
Esto implica que puedes convertir de pantone a RGB pero en sentido inverso no (no hay biyección). No puedes encontrar un código pantone para cada color de RGB.
Si deseas una función que te de una equivalencia, la estrategia sería tener un listado de cada tono disponible en pantone ( no de todos los que existen, me refiero a los que tengas a mano) y para cualquier color dado en RGB encontrar el "MÁS CERCANO" a pantone o haciendo una combinación con varios tonos pantone.
O sea que sería una aproximación por convención o el que tu consideres que más se le acerca.
Saludos
#29
Posted 07 March 2012 - 02:54 PM
Si te fijas, las impresoras de color sólo tienen 3 colores básicos con los que se crean todos los colores, si no me equivoco son Cyan, Magenta y Amarillo.
Ese detalle es importante. No es lo mismo el color conseguido con luz emitida que con luz reflejada de un tinte. Caral, deberás experimentar con tus mezclas y posiblemente encontrar una correlación entre los datos obtenidos de la foto (rgb) y los tintes que se precisen.
Existe otro pequeño detalle y es la fidelidad de color de la maquina de fotos utilizada, pues no todas son iguales y algunas ponderan mas un color para enfatizar las fotos. Con las películas de celuloide pasaba lo mismo.
Saludos.
#30
Posted 07 March 2012 - 02:59 PM
Gracias amigos, la verdad es que este tema esta muy interesante.
Me han servido de muchísimo vuestros ejemplos y comentarios.
Todavía tengo que masticar mucho pero creo que llegare a entender el concepto.
Muchas gracias.
Este aparato hace algo similar a lo que quiero hacer, toma una imagen del color y lo traduce para buscarlo en el pantone o hacerlo si no esta en la lista.
Si tenéis mas comentarios o ejemplos no dudad en ponerlos, todo me sirve.
Saludos
#31
Posted 07 March 2012 - 03:01 PM
En cambio el catálogo pantone es un intento por estandarizar los tonos empleados en la industria gráfica, es llamado color directo pero también es relativo y tiene más aplicación cuando se habla de tintes.
#32
Posted 07 March 2012 - 03:54 PM
Gracias amigo Hector.
Estoy valorando todo, es un tema que no conozco y me interesa meterme.
Saludos
#33
Posted 07 March 2012 - 05:27 PM
Por eso las impresoras utilizan en vez de RGB los colores CMYK (Cian, Magenta, Amarillo, Negro). Encontraras muchos ejemplos de como convertir un color RGB a su correspondiente valor CMYK, por ejemplo este de Zarko Gajic:
http://delphi.about....qt/rgb_cmyk.htm
Y por cierto, si quieres jugar con colores, tono, detectar bordes, difuminar, etc ... puedes echarle un vistazo a este ejemplo que deje en mi web
http://delphi.jmrds.com/?q=node/23
El enlace de descarga directa es: http://delphi.jmrds....ros_ejemplo.zip
#34
Posted 07 March 2012 - 06:14 PM
Muchas gracias amigo.
Voy a probar el ejemplo de tu web y ver que saco de todo esto.
El ejemplo de Zarko Gajic es muy interesante, pero no se si sabre como aplicarlo para lo que necesito en cuanto a saber los porcentajes de cada tinte para crear un color, algo así como los ejemplos que me habéis dado hasta ahora de RGB.
Si podéis ayudarme a entender esto de los colores CMYK seria muy bueno ya que creo que el asunto de la mezcla de tintas debe ir por ese lado.
No he terminado todavía de entender todo esto.

Muchas gracias a todos por vuestro tiempo.
Saludos
#35
Posted 07 March 2012 - 06:21 PM
Ya probé el programa amigo Seoane, que decir, bueno, lo de siempre, impresionante el manejo de esto.

No es lo que busco, pero te aseguro que ya lo tengo a buen recaudo.

Gracias.
Saludos
#36
Posted 07 March 2012 - 06:29 PM
Estaba probando el ejemplo de Zarko Gajic y me sale de primera un error:
[Error] Unit1.pas(28): Undeclared identifier: 'TRGBColor'
[Error] Unit1.pas(28): Undeclared identifier: 'TCMYKColor'
[Error] Unit1.pas(32): Undeclared identifier: 'Cyan'
[Error] Unit1.pas(33): Undeclared identifier: 'Magenta'
Tengo en el uses el Math, pero me da esos errores.
Como puedo solucionarlo para poder ver el ejemplo ?.
Saludos
#37
Posted 08 March 2012 - 04:24 AM
La función ColorAnalizator3 devolverá un valor RGB medio de la imagen analizada, no porcentajes. La media la va a llevar línea a línea para evitar valores de suma muy altos que se podrían dar en imágenes muy grandes.
Definimos las estructuras necesarias y usamos la función de Zarko Gajic para encontrar el valor CMYK:
uses Math; type TCMYKColor = packed record Cyan: BYTE; Magenta: BYTE; Yellow: BYTE; KeyPlate: BYTE; end; TRGBColor = packed record Red: BYTE; Green: BYTE; Blue: BYTE; end; function RGBtoCMYK(rgbColor: TRGBColor) : TCMYKColor; begin with Result do begin Cyan := 1 - rgbColor.Red; Magenta := 1 - rgbColor.Green; Yellow := 1 - rgbColor.Blue; KeyPlate := Min(Min(Cyan, Magenta), Yellow) ; Cyan := Cyan - KeyPlate; Magenta := Magenta - KeyPlate; Yellow := Yellow - KeyPlate; end; end; function ColorAnalizator3(Bitmap: TBitmap): TRGBColor; var l, x: integer; P: PByte; r,g,b: integer; begin With Result do begin for l := 0 to Bitmap.Height - 1 do begin r:=0; g:= 0; b:= 0; P := Bitmap.ScanLine[l]; x:=0; repeat inc(b, P^); inc(P); inc(g, P^); inc(P); inc(r, P^); inc(P); inc(x); until x = Bitmap.Width; Red:= Red + ((r div x)-Red) div (l+1); Green:= Green + ((g div x)-Green) div (l+1); Blue:= Blue + ((b div x)-Blue) div (l+1); end; end; end;
Ejemplo de uso:
var RGB: TRGBColor; CMYK: TCMYKColor; begin RGB:= ColorAnalizator3(Image1.Picture.Bitmap); CMYK:= RGBtoCMYK(RGB); end;
Espero que esto te ayude un poco mas.
Saludos.
#38
Posted 08 March 2012 - 05:52 AM
Gracias amigo.
Como lo puedo ver el dato en un label u otro ?.
Disculpa pero es que esto de los bytes no lo manejo para nada.
Saludos
#39
Posted 08 March 2012 - 06:02 AM
var RGB: TRGBColor; CMYK: TCMYKColor; begin RGB:= ColorAnalizator3(Image4.Picture.Bitmap); CMYK:= RGBtoCMYK(RGB); Label1.Caption:= 'Cian: ' + IntToStr(CMYK.Cyan); Label2.Caption:= 'Magenta: '+ IntToStr(CMYK.Magenta); Label3.Caption:= 'Yellow: ' + IntToStr(CMYK.Yellow); Label4.Caption:= 'KeyPlate: ' + IntToStr(CMYK.KeyPlate); end;
Saludos.
#40
Posted 08 March 2012 - 07:43 AM
Gracias amigo.
Osea: Los datos Byte son Float ?, o por lo menos asi lo entiendo.
Si es asi entonces se podría hacer lo mismo con los RGB ?.
Saludos