Bir bitmap'in piksellerinin ortalamasını almaya çalışıyorum. Amacım bitmapin aydınlık değerini tespit etmek (belki yanlış yoldan yapıyorumdur o da ayrı mesele).
Şimdi 640 x 480 piksellik bir bitmapi piksel piksel taradığımda maalesef CPU kullanımının % 50'leri geçtiğini gördüm.
Bunun üzerine ben de jedi'nin ManagedThread bileşen setini kullanmaya karar verdim. Amacım CPU kullanımını azaltmaktı. Ancak yine de CPU kullanımı miktarım çok fazla (yani aynı

Kullandığım prosedür (ki bu prosedür TJVMTThread componentinin OnExecute olay işleyicisidir) aşağıdaki şekilde:
Kod: Tümünü seç
var
xt, yt : integer;
SatirOrtalamalariArrayi,
GecerliSatirArrayi : Array of DWord;
begin
try
ABitmap.Canvas.Lock;
SetLength(SatirOrtalamalariArrayi,ABitmap.Height);
SetLength(GecerliSatirArrayi,ABitmap.Width);
For yt:= 0 to ABitmap.Height-1 do
begin
For xt:= 0 to ABitmap.Width-1 do
begin
GecerliSatirArrayi[xt] := ABitmap.Canvas.Pixels[xt, yt];
end;
SatirOrtalamalariArrayi[yt] := WordMean(GecerliSatirArrayi);
end;
ResimParlakligi := WordMean(SatirOrtalamalariArrayi);
finally
ABitmap.Canvas.Unlock;
MTThread.Terminate;
end;
Kod: Tümünü seç
function WordMean(WordAr: Array of DWord):DWord;
Var
I : Integer;
Toplam : LongInt;
begin
//burada dizi içerisindeki word değerlerin ortalamasını al
Toplam := 0;
try
For I:= 0 to Length(WordAr)-1 do
begin
Toplam := Toplam + WordAr[I];
end;
If Toplam = 0 then
begin
Result := 0;
end
else
begin
Result := Round(Abs(Toplam) div Length(WordAr));
end;
except
end;
//burada dizi içerisindeki word değerlerin ortalamasını al SON
end;

Saygılarımla ve Şimdiden Teşekkürler.