Так я не понял, вам сколько бит нужно на канал? В смысле, к чему относится та фраза про 12 бит. Если вы свернете 16 бит в 8, и оставите второй байт пустым, то где тут 12 бит и 4095?
Вторая часть, если вы где-то собираетесь использовать результат, то, вряд ли вы захотите ковырять psd-формат в котором окажутся ваши "R0G0B0". А если это не psd-формат, то, я вообще не вижу причины для лени к написанию конвертера для трех массивов (в файле обычно запись такая RRRRR... GGGGG.... BBBBB....).
Попробуйте инвариант - добавляйте пустые байты к 8-битному на канал файлу изображения.