Ver Mensaje Individual
  #9  
Antiguo 31-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
Bien, en tu código el problema es el siguiente (marcado en rojo), al hacer referencia a un pixel que no existe devuelve el color blanco por defecto, por eso te aparecía el color blanco aun cuando la imagen no lo contenía:

Código Delphi [-]
for Y := (image1.Width - image1.Width) to image1.Width -1 do
begin
  for X := (image1.Height - image1.Height) to image1.Height -1 do
  begin

Por otro lado, retoque un poco el código:
Código Delphi [-]
var
  i,j: integer;
  Histograma: array[0..255] of Integer;
  Max: Integer;
begin
  FillChar(Histograma,Sizeof(Histograma),0);
  for i:= 0 to Image1.Picture.Bitmap.Width - 1 do
    for j:= 0 to Image1.Picture.Bitmap.Height - 1 do
      inc(Histograma[Image1.Canvas.Pixels[i,j] and $FF]);

  Max:= 0;
  for i:= 1 to 255 do
    if Histograma[i] > Histograma[Max] then
      Max:= i;

  j:= Image1.Picture.Bitmap.Width * Image1.Picture.Bitmap.Height;
  Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
  for i:= 0 to 255 do
  begin
    Image2.Canvas.MoveTo(i,0);
    Image2.Canvas.LineTo(i,(Image2.Height * Histograma[i]) div Histograma[Max]);
  end;
end;

Pero esto ultimo ya es cuestión de gustos. De todas formas para este tipo de operaciones usar la propiedad Pixels del canvas es poco eficiente. Echale un vistazo a la propiedad Scanline del bitmap, mucho mas apropiada para estos casos.

PD: Usa la etiquetas [delphi][/delphi] para incluir código, de esta manera se podrá leer mucho mejor.
Responder Con Cita