Я честно говоря в суть алгоритма кодирования не вникал, но так
писать нельзя, вот вам и "Invalid variable reference"
Процедура
write в качестве второго параметра требует именно переменную, а не число или результат функции.
Т.Е. можно делать только так:
[syntax='Delphi']
var
BB:byte;
....
BB:=ChangeByte(....);
write(FileOutBmp,BB);
[/syntax]
То же самое и с чтением.
Кстати, раз уж прога пишется на Delphi, советую не использовать допотопные методы типа "File of byte" и т.д., а пользоваться классом
TFileStream.
Ни что так не ограничивает фантазию программиста, как компилятор...