Cześć, tworzę program, ktróry m.in. tworzy histogram bitmapy - w skali szarości.
Do testów używam dużej bitmapy: 1536 x 2048.
Mój kod jednak trochę czasu trwa. I coś jest nie tak.
Otóż z tego, co wiem, to skala szarości to kolory od 0 do 255.
Stworzyłem sobie nowy typ:
THistogram = array[0..255] of integer;
Elementy tablicy to poszczególne kolory, natomiast jej wartości mają przedstawiać ilość wystąpień, np:
HistArray[0] = 1039 - oznacza, że kolor 0 wystąpił 1039 razy.
Kod wypełniający tą tablicę wygląda tak:
procedure MakeHistogram(var HistArray: THistogram; Bitmap: TBitmap);
var
i, j: integer;
begin
for i:=1 to Bitmap.Height do
for j:=1 to Bitmap.Width do
begin
HistArray[Bitmap.Canvas.Pixels[i, j]]:=HistArray[Bitmap.Canvas.Pixels[i, j]]+1;
end;
end;
Okazuje się jednak, że jest tu jakiś błąd.
Ponieważ Bitmap.Canvas.Pixels[i, j] przyjmuje również wartości spoza zakresu.
Czemu tak jest?
I czy można operację tworzenia histogramu wykonać jakoś szybciej/lepiej?
(chodzi mi tylko o bitmapy w skali szarości)