Ir al contenido


Foto

Definicion de colores por pixeles


  • Por favor identifícate para responder
41 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 07:47

Hola a todos.
No se si lo que se me ocurre sera posible, una tontería o simplemente con delphi no se puede hacer, pero de todos modos pregunto por si acaso sabéis algo al respecto:

Supongamos que tengo una foto en la cual aparece un color, por ejemplo naranja.
Sabemos que el naranja es la mezcla de rojo y amarillo, pero hay diferentes tonos de naranja.
Si se pudiera pixelear la foto tal vez podríamos ver una cantidad determinada de amarillo y otra de rojo, esto haría el tono especifico.
Que me gustaría lograr:
Un programa que contando con una foto pixeleada pudiera definir tal vez por centímetro cuadrado la cantidad de puntos de un color u otro y sacar un porcentaje de cada uno de ellos.
Se podrá hacer ?
Se que esta fuera de mis manos por eso si se pudiera hacer me gustaría un ejemplo o algo así.

Os dejo la inquietud a ver si se puede lograr algo.

Gracias de antemano
Saludos
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 07 marzo 2012 - 08:08

No se si te entiendo bien. ¿Deseas sacar el porcentaje de rojo, azul y verde de una imagen?.
Eso no es difícil de hacer en delphi. Tenemos que barrer la imagen punto a punto y determinar cada pixel y estudiar la candidad de cada color primario desde 0 a 255. Para ello no hace falta una foto pixelada.

Si deseas obtener colores no primarios es mas complicado, habría que determinar que color estudiar y en que banda de tonos lo consideramos a ese color, para luego barrer la foto.

Si te contentas con fotos pixeladas, una posibilidad es pasarla a 256 colores y estudiar sólo la paleta del bitmap...

En delphi si se pueden hacer ese tipo de cosas.  :)


Saludos.

  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 marzo 2012 - 09:49

¿Será que quieres hacer un sistema que iguale colores ?

Saludos
  • 0

#4 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 10:46

Hola

No se si te entiendo bien. ¿Deseas sacar el porcentaje de rojo, azul y verde de una imagen?.
Eso no es difícil de hacer en delphi. Tenemos que barrer la imagen punto a punto y determinar cada pixel y estudiar la candidad de cada color primario desde 0 a 255. Para ello no hace falta una foto pixelada.

Si deseas obtener colores no primarios es mas complicado, habría que determinar que color estudiar y en que banda de tonos lo consideramos a ese color, para luego barrer la foto.

Si te contentas con fotos pixeladas, una posibilidad es pasarla a 256 colores y estudiar sólo la paleta del bitmap...

En delphi si se pueden hacer ese tipo de cosas.  :)


Saludos.

Amigo Escafandra si es algo asi, lo de pixeles solo se me ocurrió por desconocimiento.
Creo que en algunos casos los colores no son primarios, pero no lo se.

¿Será que quieres hacer un sistema que iguale colores ?

Saludos

Si amigo, es exactamente eso, un sistema de igualación de colores.
Que pueda tomar una foto a un color determinado y que me indique que mezcla de colores lo compuso.

Se podrá ?.
Me podríais dar un ejemplo funcional en delphi ?.

Os agradezco la ayuda.
Saludos

  • 0

#5 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 11:18

Hola
Se supone que este es un sistema para igualacion de colores.
Dadme vuestra opinión.
Saludos
  • 0

#6 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 12:17

Hola
Acabo de ver este ejemplo de Seoane y me parece que me va con lo que necesito.
Si tenéis otras ideas decidlo. (y)
Saludos
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 07 marzo 2012 - 12:22

Hola
Acabo de ver este ejemplo de Seoane y me parece que me va con lo que necesito.
Si tenéis otras ideas decidlo. (y)
Saludos


No veo el ejemplo, quizás no pusiste el enlace.

Te  pongo un ejemplo básico que analiza un Bitmap de 24 bits y encuentra el % de sus colores primarios:



delphi
  1. procedure ColorAnalizator(Bitmap: TBitmap; var r, g, b: Extended);
  2. var
  3.   l, x, T: integer;
  4.   P: PByte;
  5. begin
  6.   r:=0; g:=0; b:=0;
  7.   for l := 0 to Bitmap.Height - 1 do
  8.   begin
  9.     P := Bitmap.ScanLine[l];
  10.     x:=0;
  11.     repeat
  12.       b:= b+P^; inc(P);
  13.       g:= g+P^; inc(P);
  14.       r:= r+P^; inc(P);
  15.       inc(x);
  16.     until x = Bitmap.Width;
  17.   end;
  18.   T:= Bitmap.Height*Bitmap.Width*255;
  19.   if T = 0 then exit;
  20.   r:= (r / T)*100;
  21.   g:= (g / T)*100;
  22.   b:= (b / T)*100;
  23. end;



Ejemplo de uso:


delphi
  1. var
  2.   r, g, b: Extended;
  3. begin
  4.   ColorAnalizator(Image1.Picture.Bitmap, r, g, b);
  5. end;




Saludos.
  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 12:41

Hola
Gracias amigo.
Estaba viendo un pantone de colores y los codigos son diferentes, no por numeros sino por letras.
e
f
s
Algo asi.
Se podra conseguir saber a que letra pertenece cada color RGB?.
Saludos
  • 0

#9 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 07 marzo 2012 - 12:47

Se podra conseguir saber a que letra pertenece cada color RGB?.

Quizás analizando bitmaps de colores primarios conocidos rojo, verde y azul puros. Los haces con el Paint y comparas los resultados.


Saludos.
  • 0

#10 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 01:01

Hola
Gracias amigo.
Otra pregunta:
El rgb me dice los numeros que corresponden a cada color, pero no me dice las proporciones de cada uno, como puedo saberlas ?.
Saludos
  • 0

#11 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 07 marzo 2012 - 01:12

El rgb me dice los numeros que corresponden a cada color, pero no me dice las proporciones de cada uno, como puedo saberlas ?.

rgb es un código de color. Cada color se representa en un byte (8 bits) y el valor máximo que puede tener es 255, es decir los colores son mezclas de 256 tonalidades de los tres colores básicos.

Para un color básico: percent = val*100/255.

El código que te puse calcula los porcentajes de cada color básico para el conjunto de un bitmap analizado.


Saludos.
  • 0

#12 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 07 marzo 2012 - 01:21

Esto es al estilo de un "cuenta gotas" que por lo general vienen en cualquier programa de dibujo o diseño, llámese Paint, Corel, Photoshop.
Mira la necesidad Caral, hablando en términos de impresión viene el modelo RGB y el CMYK, en algo tan simple como la paleta de Paint aparece además la matiz, la saturación y luminosidad de cada color.


Saludos!
  • 0

#13 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 01:22

Hola
Corri el programa pero no se como mostrar el dato.
Como puedo o donde lo puedo mostrar ese valor tanto el rgb como el porcentaje ?
Disculpa tanta cosa, pero en esto estoy perdido.
Saludos
  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 marzo 2012 - 01:25

Aprovechando el código de escafandra, haría algo así:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   r, g, b: Extended;
  4.   r1,g1,b1 : Byte;
  5.   colorRGB : TColor;
  6. begin
  7.   ColorAnalizator(Image1.Picture.Bitmap, r, g, b);
  8.   r1 := trunc((255*r)/100);
  9.   g1 := trunc((255*g)/100);
  10.   b1 := trunc((255*b)/100);
  11.   showMessage( format('Color RGB (%d,%d,%d)',[r1,g1,b1]) );
  12.   colorRGB := RGB(r1,g1,b1);
  13.   Form1.Color := ColorRGB;
  14. end;



Saludos

Archivos adjuntos


  • 0

#15 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 01:33

Hola
Gracias amigo.
El asunto es que como de esto no se nada estoy muy perdido.
A ver si me explico mejor.
Tengo que preparar ciertos colores.
Les tomo una foto y la pongo en el ordenador.
De ahi con vuestro codigo me sale el numero RGB que corresponde a ese color.
El asunto es:
Como se que cantidad (%) de pigmento necesito de cada color para hacer el color final ?.
En el pantone que tengo salen letras, no numeros y salen las cantidades en gramos de pigmento, pero este no me sirve para colores especiales, solo para los que tiene el pantone.
Saludos
  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 marzo 2012 - 01:42

En estos valores.

var
  r, g, b: Extended;

Obtienes el porcentaje del color primario RGB, es decir, er el ejemplo que subi se ve lo siguiente:

r = rojo      33.33 %
g = verde    66.66 %
b = azul      50.98 %

Saludos
  • 0

#17 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 marzo 2012 - 01:45

mmmmm, me parece que ya entiendo por donde va tu pregunta.

Cantidad de cada color para obtener la unidad.

Saludos
  • 0

#18 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 01:47

Hola
Como muestro ese dato amigo.
Si lo pongo en el showmessage me da un error.
Solo puedo ver el dato RGB.
Saludos
  • 0

#19 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 07 marzo 2012 - 01:48

Hola

mmmmm, me parece que ya entiendo por donde va tu pregunta.

Cantidad de cada color para obtener la unidad.

Saludos

Si amigo, cuanto necesito de rojo, verde, azul, amarillo etc para hacer otro color X.
Saludos
  • 0

#20 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 07 marzo 2012 - 01:52

Hola
Como muestro ese dato amigo.
Si lo pongo en el showmessage me da un error.
Solo puedo ver el dato RGB.
Saludos




delphi
  1.   showMessage( format('Color RGB (%f,%f,%f)',[r,g,b]) );



Saludos

  • 0




IP.Board spam blocked by CleanTalk.