InStream.Seek(0, soFromBeginning);
InStream.Seek(5, soFromCurrent); //почему не просто InStream.Seek(5, soFromBeginning); или InStream.position := 5 ?
InStream.Read(b, 1); // длина строки входит в 1 байт? от 0 до 255??
SetLength(bb, b); // установить длину строки bb в b символов
InStream.Read(bb[0], b); // прочитать в строку bb b байтов. Но строка должна содержать b*sizeof(char) байтов, т.е. 2b...
ну и в mm попадает вообще максимум 255 - 6 - b это вообще непонятная формула
до битмапа там вообще непонятно что доходит
mm.CopyFrom(InStream, InStream.Size - 6 - b);// позиция InStream не определена. я бы сделал хотя бы InStream.position := 0;