Как происходит создание зеркального отображения файла JPG без создания или использования декодера? - PullRequest
0 голосов
/ 08 декабря 2018

Итак, я как бы экспериментирую с манипуляциями с изображениями на уровне байтов (без оболочки 'Image' или библиотек), поэтому язык не имеет значения (я использую C #) так же, как байты.сами манипуляции.

Я сейчас пытаюсь перевернуть изображение .jpg (минус магическое число) по осям x и y, но после некоторых проб и ошибок осознал, что кодировка становитсяв пути.Вот код, который я использую для байта [] без FF D8 или FFD9 включает в себя:

    //No magic number included            
    public class MirrorImgOverXAndYAxes : IFunction
    {
        //No magic number included
        public byte[] Exec(byte[] jpgImage)
        {
            byte[] resultingImage = new byte[jpgImage.Length];

            for (var i = jpgImage.Length - 1; i >= 0; i--)
            {
                var indexToInsert = jpgImage.Length - 1 - i;
                resultingImage[indexToInsert] = jpgImage[i];
            }

            return resultingImage;
        }
    }

В настоящее время я предполагаю, что это не так просто, как это, и что я быпостроить полноценный декодер, чтобы иметь возможность манипулировать байтами изображения следующим образом.

Возможно ли создать это зеркальное отображение без декодера, и что-то вроде того, что я делаю, работает?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Нет простого способа создать зеркальное изображение, которое будет работать вообще без декодирования.

Одна проблема состоит в том, что изображения JPEG кодируются в микроконтроллерах, которые, в свою очередь, состоят из блоков размером восемь на восемь пикселей.Для простоты предположим, что MCU является блоком 8x8, ширина изображения составляет 15 пикселей.Это означает, что на краю будет фиктивная колонна.Если вы просто перевернете это, столбец-заглушка будет виден, а столбец изображения будет за гранью.

0 голосов
/ 08 декабря 2018

Привет, я думаю, что просто перевернуть jpeg путем переключения позиции байтов здесь не получится, из-за структуры файлов jpg.если вы хотите узнать больше об этом, вы можете посмотреть здесь ввести описание ссылки здесь Но вы можете попытаться преобразовать изображение в формат, который фактически сохраняет его пиксели в пределах одного байта.Например, растровые изображения (.bmp).

...