Я храню данные в изображениях, где каждый пиксель представляет точку данных (ключ: пары значений).Расположение пикселя представляет «ключ», а цвет пикселя представляет числовое «значение».Пример данных будет выглядеть следующим образом:
| key | value |
| ---- | ----- |
| A | 255 |
| B | 1000 |
| C | 20000 |
| D | 15 |
Данные будут преобразованы в пиксельные данные следующим образом:
| pixel location | r,g,b |
| -------------- | ------- |
| 0,0 | 0,0,255 |
| 0,1 | 0,3,232 |
| 1,0 | 0,78,32 |
| 1,1 | 0,0,15 |
Отображение точек в местоположениях пикселей выполняется с помощью aформула и определенная точка данных, «ключ», всегда отображаются в одно и то же положение пикселяПреобразование числового значения в r, g, b выполняется путем преобразования числа в 24 бита, а затем деления его на 8-битные порции и преобразования обратно в числовое значение, чтобы получить значения r, g, b.Ниже приведено фактическое изображение, содержащее 65536 точек данных в 256x256px
Если я подготовлю другой набор данных, в котором «ключи» отсортированы, а их ранг назначен как «значение», то яполучим такую таблицу (показано только 4 строки):
| key | value(**rank**) | r,g,b |
| ---- | --------------- | ----- |
| A | 0 | 0,0,0 |
| B | 1 | 0,0,1 |
| C | 2 | 0,0,2 |
| D | 3 | 0,0,3 |
Если я подготовлю таблицу рангов для 65536 точек данных и преобразую в изображение, то получу
Теперь интересная часть, второе изображение имеет то же количество пикселей и содержит больше цветовых значений, но занимает меньше места (первое изображение - 158 КБ, второе изображение - 1,2 К ).Я предполагаю, что это из-за формулы, которую я использую, которая совпадает с алгоритмом сжатия PNG.
Итак, мой вопрос, используя второе изображение в качестве маски, учебника для начинающих и т. Д., Можем ли мы сделать первое изображение, чтобы занимать меньше места?Я пробовал XOR [1] между двумя изображениями, но это не помогло.Моя общая цель - сохранить пары ключ-значение в изображении без потерь с минимально возможным размером изображения.
[1]: почему XOR?потому что мне нужен способ, который обратим, я не хочу потерять исходные данные