Целью сжатия без потерь является возможность прогнозировать следующий пиксель на основе предыдущих пикселей, а затем кодировать разницу между вашим прогнозом и реальным значением пикселя. Это то, что вы изначально думали сделать, но вы использовали только один предыдущий пиксель и предсказывали, что следующий пиксель будет таким же.
Имейте в виду, что если у вас есть все предыдущие пиксели, у вас есть более релевантная информация, чем только предыдущий пиксель. То есть, если вы пытаетесь предсказать значение X, вы должны использовать O пикселей:
.. ООО ... * * 1005
..OX
Кроме того, вы не хотите использовать предыдущий пиксель B в потоке для прогнозирования X в следующей ситуации:
OO ... B <- Конец строки <br>
X <- начало следующего ряда </p>
Вместо этого вы бы сделали свою базу прогнозов на основе ОС.