Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-08-2007
Cesar Junior Cesar Junior is offline
Miembro
 
Registrado: ago 2007
Posts: 24
Poder: 0
Cesar Junior Va por buen camino
Histograma en Delphi

Ola a todos, estoy con un projecto en la uni, y tengo un gran problema para crear un Histograma de imagen (escala de gizes) en Delphi7, le cuestion es que entiendo mui bien el funcionamento del histograma, ya el problema esta en implementar en delphi, hora q soy un iniciante, si pudieran ayudarme les sere muy grato, obs.... disculpem por mi español q no es muy bueno ..jejeje
Responder Con Cita
  #2  
Antiguo 14-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes.

1. ¿La imagen esta en un archivo? ¿esta en un TImage? ¿es bmp, jpeg, ...?
2. ¿La imagen esta en color o en blanco y negro?
3. ¿El resultado lo necesitas en un array o lo quieres dibujar en una gráfica?
Responder Con Cita
  #3  
Antiguo 14-08-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Bueno, Bienvenido¡¡¡ a este, el ClubDelphi, ya nos haz explicado que no escribes bien en español, pero de todas formas, debes explicarnos mejor lo que necesitas, mira tu dices:

Cita:
Empezado por Cesar Junior
le cuestion es que entiendo mui bien el funcionamento del histograma
Entonces cuentanos, ¿De que se trata el funcionamiento de dicho histograma?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 14-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Será algo como ésto :

Código Delphi [-]
procedure TForm1.FormPaint(Sender: TObject);
var Pos: Cardinal;
begin
 Pos := 256;
 with Canvas do
  repeat Dec(Pos);
   Pen.Color := RGB(Pos, Pos, Pos);
   MoveTo(Pos, 0);
   LineTo(Pos, 64);
  until Pos = 0;
end;

0j0: OnPaint
Responder Con Cita
  #5  
Antiguo 15-08-2007
Cesar Junior Cesar Junior is offline
Miembro
 
Registrado: ago 2007
Posts: 24
Poder: 0
Cesar Junior Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Bueno, Bienvenido¡¡¡ a este, el ClubDelphi, ya nos haz explicado que no escribes bien en español, pero de todas formas, debes explicarnos mejor lo que necesitas, mira tu dices:



Entonces cuentanos, ¿De que se trata el funcionamiento de dicho histograma?


Vemaos si me expresso mejor, los pixels varian de 0 a 255, siendo q 0 seria el pixel mas oscuro y el 255 ya llegando al blanco, queria barrer los pixels de la imagen guardando-los en un array, como quantos pixels de 0 y quntos de 145 i assi llegar hatsa el 255, despues de tener las contaje d de cada valor en un array crear un histograma, puede ser en un Tchart, para mostrar la equalizacion, la imagen le cargo en un TImage y es de tipo Btimap, haber si me entienden mejor, desde ja garto
Responder Con Cita
  #6  
Antiguo 15-08-2007
Cesar Junior Cesar Junior is offline
Miembro
 
Registrado: ago 2007
Posts: 24
Poder: 0
Cesar Junior Va por buen camino
Cita:
Empezado por seoane Ver Mensaje
Vamos por partes.

1. ¿La imagen esta en un archivo? ¿esta en un TImage? ¿es bmp, jpeg, ...?
2. ¿La imagen esta en color o en blanco y negro?
3. ¿El resultado lo necesitas en un array o lo quieres dibujar en una gráfica?

sip, la imagen esta en un TImage y es del tipo Bitmap
Responder Con Cita
  #7  
Antiguo 15-08-2007
Cesar Junior Cesar Junior is offline
Miembro
 
Registrado: ago 2007
Posts: 24
Poder: 0
Cesar Junior Va por buen camino
Cita:
Empezado por Cesar Junior Ver Mensaje
Vemaos si me expresso mejor, los pixels varian de 0 a 255, siendo q 0 seria el pixel mas oscuro y el 255 ya llegando al blanco, queria barrer los pixels de la imagen guardando-los en un array, como quantos pixels de 0 y quntos de 145 i assi llegar hatsa el 255, despues de tener las contaje d de cada valor en un array crear un histograma, puede ser en un Tchart, para mostrar la equalizacion, la imagen le cargo en un TImage y es de tipo Btimap, haber si me entienden mejor, desde ja garto
code:
pixels --> ocorrência
0 3
1 1
10 2
15 4

ae eh soh montar o gráfico
code:
ocorrencia
5|
4| |
3| | |
2| | | |
1| | | | |
0|_|_|______|________|____
0 1 10 15 pixel
Responder Con Cita
  #8  
Antiguo 15-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Podemos empezar por contar cuantos píxeles de cada color hay en la imagen:
Código Delphi [-]
var
  i,j: Integer;
  Histograma: Array[0..255] of Integer;
begin
  FillChar(Histograma,Sizeof(Histograma),#0);
  for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
    for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
      inc(Histograma[Image1.Picture.Bitmap.Canvas.Pixels[i,j] and $FF]);
end;
Responder Con Cita
  #9  
Antiguo 15-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Y para terminar podemos dibujar la gráfica en otro TImage con un ancho de 256 píxeles:
Código Delphi [-]
var
  i,j: Integer;
  Histograma: Array[0..255] of Integer;
begin
  FillChar(Histograma,Sizeof(Histograma),#0);
  for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
    for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
      inc(Histograma[Image1.Picture.Bitmap.Canvas.Pixels[i,j] and $FF]);

  j:= 1;
  for i:= 1 to 255 do
    if Histograma[i] > j then
      j:= Histograma[i];
  Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
  for i:= 0 to 255 do
  begin
    Image2.Canvas.MoveTo(i,Image2.Height);
    Image2.Canvas.LineTo(i,Image2.Height - ((Image2.Height * Histograma[i]) div j));
  end;
end;
Responder Con Cita
  #10  
Antiguo 15-08-2007
Cesar Junior Cesar Junior is offline
Miembro
 
Registrado: ago 2007
Posts: 24
Poder: 0
Cesar Junior Va por buen camino
Talking

Cita:
Empezado por seoane Ver Mensaje
Y para terminar podemos dibujar la gráfica en otro TImage con un ancho de 256 píxeles:

Código Delphi [-]
var
i,j: Integer;
Histograma: Array[0..255] of Integer;
begin
FillChar(Histograma,Sizeof(Histograma),#0);
for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
inc(Histograma[Image1.Picture.Bitmap.Canvas.Pixels[i,j] and $FF]);

j:= 1;
for i:= 1 to 255 do
if Histograma[i] > j then
j:= Histograma[i];
Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
for i:= 0 to 255 do
begin
Image2.Canvas.MoveTo(i,Image2.Height);
Image2.Canvas.LineTo(i,Image2.Height - ((Image2.Height * Histograma[i]) div j));
end;
end;





Amigo, muchas gracias por la ayuda!!!! ya tenia dias quebrando cabeza, te agardezco por ocupar tu tiempo ayudandome!!! quedo de maravilhas!!!


Valeu cara muito obrigado!!!
Responder Con Cita
  #11  
Antiguo 05-07-2012
chinnamasta chinnamasta is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 6
Poder: 0
chinnamasta Va por buen camino
Gracias a mi también me funciono

hola muy buenos días después de estar mas de tres días de tratar de encontrar la manera de crear el histograma de una Timage que me lea el RGB por fin encontré en que es que estaba fallando jeje.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta Delphi 6, Delphi 2005 y Delphi 2006 Leviatan Varios 6 18-08-2007 16:02:08
Histograma. Obtener máximos y mínimos relativos Delphius Varios 7 16-04-2007 12:12:46
Histograma javikanin Varios 16 02-01-2006 23:40:17
Graph Meter (histograma) cadena Gráficos 0 01-12-2004 19:29:23


La franja horaria es GMT +2. Ahora son las 21:15:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi