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.