Wenn du es schon schnell haben willst, würde ich die if-Abfrage aus der Schleife rausnehmen und noch
RGB ersetzen

.
Btw: Es ging nicht um Byte-Werte, sondern (0, 1, 2). Wenn ein So-Gut-Wie-Weiß reicht:
Delphi-Quellcode:
// values[i] sei für alle i gleichlang
function MakeGray(values: TGrayArray): TBitMap;
var
x, y: Integer;
ptr: PCardinal; // 32bit
begin
Result := TBitmap.create;
Result.Width := length(values);
Result.height := length(values[0]);
for y := 0 to high(values[0]) do
begin
ptr := Result.ScanLine[y];
for x := 0 to high(values) do
begin
ptr^ := $7F7F7F * values[x, y];
Inc(ptr);
end;
end;
end;