ч/б - это в любом случае мазня получится

ну вот можно как-нибудь так:
newColor:=round((0.30 * GetRValue(RGBColor)) + (0.59 * GetGValue(RGBColor)) + (0.11 * GetBValue(RGBColor )));
if (newColor<clGray) then Image1.Canvas.Pixels[i,j]:=clBlack else
Image1.Canvas.Pixels[i,j]:=clWhite;
0.30, 0.59, 0.11 - коэффициенты для конверсии в ч/б (нашёл в инете).
GetRValue, GetGValue, GetBValue - стандартная функция для получения цветовых составляющих.
То есть мы берем текущий цвет, преобразовываем его в градацию серого, которую потом сравниваем со значением серого. Если меньше, то чёрный, иначе белый (либо наоборот).
P.S.: я уже Delphi не помню, и может быть код вообще неработоспособен

Но главное - пойми принцип
Вот ссылка на код как сделать стандартный цвет темнее или светлее...можно попробовать поковырять его - опять же сравнение будет со значением серого

------------------------------------------------------------------------------------------
Нашёл наитупейший, а значит работающий вариант:
procedure TForm1.Button1Click(Sender: TObject);
var
x, y : integer;
r, g, b : byte;
c : dword;
begin
Image1.Picture.LoadFromFile('d:\1.bmp');
for y := 0 to Image1.Height-1 do
begin
for x := 0 to Image1.Width-1 do
begin
c := Image1.Canvas.Pixels[x,y];
r := GetRValue(c);
g := GetGValue(c);
b := GetBValue(c);
if (r + g + b) div 3 > 128 then Image1.Canvas.Pixels[x,y] := clWhite;
else Image1.Canvas.Pixels[x,y] := clBlack;
end;
end;
end;
---------------
тут вообще тупо складываются составляющие и делится на три

Гениально!
Последний раз редактировалось Meridian; 20.01.2011 в 21:50.