Как указать байтовый порядок в Jasper JPEG2000 - PullRequest
0 голосов
/ 04 декабря 2018

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

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 Ответ

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

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

Вы не можете .

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

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

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

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

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

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

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

...