Это действительно должен был быть комментарий к рутине @ Мэйсона, чтобы превратить RGB в GreyScale, но, поскольку я не знаю, как сделать код для показа комментария, я делаю его вместо этого.
Вот как я делаю преобразование:
FUNCTION RGB2GRAY(R,G,B : BYTE) : BYTE; Register; ASSEMBLER;
ASM
IMUL EAX,19595
IMUL EDX,38470
IMUL ECX,7471
ADD EAX,EDX
ADD EAX,ECX
SHR EAX,16
END;
FUNCTION GreyScale(C : TColor) : TColor; Register; ASSEMBLER;
ASM
MOVZX EDX,AH
MOV ECX,EAX
SHR ECX,16
MOVZX EAX,AL
CALL RGB2GRAY
MOVZX EAX,AL
MOV AH,AL
SHL EAX,8
MOV AL,AH
END;
Я не знаю, является ли это формулой NTSC или чем-то еще, но они, похоже, работают в моих программах: -).