Как указать байтовый порядок в Jasper JPEG2000

Я кодирую необработанный байт в JPEG2000 с использованием библиотеки Джаспера. Полученное изображение с прямым порядком байтов, тогда как мне нужен вывод с прямым порядком байтов. Как указать порядок байтов в яшме? Вот фрагмент кода:

EncodeAsJPEG2000(array<Byte> ^inputImage, array<Byte> ^outputImage, uint32 width, uint32 height, uint32 size)
{
    jas_init();
    jas_image_t *pImage;
    pImage = jas_image_create0();
    pin_ptr<Byte> pInput = &inputImage[0];

    int totalCopied = 0;
    if (pImage)
    {
        tsize_t bytesperline = 2;
        int iCmp = 0;

            jas_stream_t *pStream;
            jas_image_cmptparm_t cmptparm;
            cmptparm.tlx = 0;
            cmptparm.tly = 0;
            cmptparm.hstep = 1;
            cmptparm.vstep = 1;
            cmptparm.width = width;
            cmptparm.height = height;
            cmptparm.prec = 16;
            cmptparm.sgnd = false;
            jas_image_addcmpt(pImage, iCmp, &cmptparm);


            //jas_image_setcmpttype(pImage, 0, JAS_IMAGE_CT_GRAY_Y);

            pImage->clrspc_ = JAS_CLRSPC_SGRAY;         /* grayscale Image */
            pImage->cmprof_ = 0;

            jas_stream_seek(pImage->cmpts_[iCmp]->stream_, 0, SEEK_SET);
            jas_stream_write(pImage->cmpts_[iCmp]->stream_, pInput, size);


            pStream = jas_stream_fopen("C:\\jaspimage.jp2" , "w+b");
            int copied = 0;
            if (pStream)
            {
                char optionsString[128];
                optionsString[0] = '\0';

                int format = jas_image_strtofmt("jp2");
                jas_image_encode(pImage, pStream, format, "rate=1.0");

                jas_stream_close(pStream);
            }



        jas_image_destroy(pImage);
    }
}

Я подтвердил порядковый номер, используя ImageJ. Это говорит, что порядковый номер немного ложный.

1 ответ

Как указать порядок байтов в яшме?

Вы не можете.

Ни в его документации ничего не говорится об этом, ни в src нет ничего связанного с этим.

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

Однако, как упомянул @MatthewPope, вы можете попробовать перевернуть только данные Exif (подробнее см. Как я могу изменить порядковый номер моего файла с exiftool?), Например, так:

exiftool -all= -tagsfromfile test.jpg -all:all -unsafe -exifbyteorder=little-endian test.jpg

Этот подход будет значительно быстрее, чем вышеупомянутый, так как размер данных Exif в большинстве случаев по меньшей мере на один порядок меньше, чем весь файл.

Википедия утверждает, что размер метаданных Exif ограничен до 64 кБ в изображениях JPEG, что, если оно истинно, в ~812 раз меньше, чем размеры изображений, с которыми вы работаете.

ExifTool может использоваться для редактирования метаинформации в изображении. Прочтите также этот интересный вопрос: Какое значение имеет порядковый номер JPEG при кодировании?

Другие вопросы по тегам