به نظرم بهتره تصویر دور نگ نشه.
چنین کدی نوشتم(قبلا برای حذف خاکستری هم کد نوشته بودم.بنابر این سفید کردن مابقی نقاط رو کار نداشتم):
Type
TRGBArray = ARRAY[0..32767] OF TRGBTriple;
pRGBArray = ^TRGBArray;
procedure AdjustGray(var Bmp:TBitmap;N:Byte);//0<N<6
var
P : pRGBArray; // Scanlines
X,Y:Word;
begin
For Y:=0 to Bmp.Height-1 do
Begin
P:=Bmp.ScanLine[Y];
For X:=0 to Bmp.Width-1 do
if P[X].rgbtBlue<200 then
Begin
P[X].rgbtRed:=P[X].rgbtRed-(P[X].rgbtRed*N div 5);
P[X].rgbtGreen:=P[X].rgbtGreen-(P[X].rgbtGreen*N div 5);
P[X].rgbtBlue:=P[X].rgbtBlue-(P[X].rgbtBlue*N div 5);
End;
End;
end;