在不创建或使用解码器的情况下创建JPG文件镜像的过程是什么?

时间:2018-12-07 22:38:03

标签: image image-processing jpeg

因此,我正在尝试在字节级别(没有'Image'包装器或库)进行图像操作,因此语言与字节级无关(我正在使用C#)本身。

我现在正尝试在x轴和y轴上翻转.jpg图像(减去幻数),但经过反复试验后意识到,我认为编码已成问题。这是我在不包含FF D8或FFD9的byte []上使用的代码:

    //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 :(得分:1)

您好,我猜只是通过切换字节位置来翻转jpeg在这里实际上不起作用,这是因为jpg文件的实际结构如何。如果您想进一步了解,可以在这里enter link description here 但是您可以尝试将图像转换为实际上将像素保存在单个字节内的格式。例如位图(.bmp)。

答案 1 :(得分:1)

没有简单的方法来制作通常无需解码即可工作的镜像。

一个问题是JPEG图像是在MCU中编码的,而MCU又由八乘八像素的块组成。为简单起见,假定MCU是8x8块,图像宽度为15像素。这意味着边缘将有一个虚拟列。如果您仅翻转它,则虚拟列将可见,而图像列将不在边缘。