сохранить массив пикселей в файл изображения jpeg c

#c

#c

Вопрос:

у меня есть массив пикселей, содержащий значения от 0 до 255… я передал его в свою функцию c … этот массив пикселей я хочу сохранить в файл изображения jpeg…

как это сделать с правильной кодировкой??

я преобразовал массив в двоичную строку и сохранил его в файл в приведенном ниже коде, но это просто сохраняет пустое изображение размером 4 байта…

     FILE *file = fopen("/media/internal/wallpapers/04.jpeg", "w ");
    fwrite(binaryStr , 1 , sizeof(binaryStr) ,file );    

    fclose(file);
  

спасибо

Комментарии:

1. опубликуйте определение binaryStr.

2. Этот код не будет записывать jpeg для вас. Он просто сбросит эти двоичные данные в файл с расширением jpeg. Неудивительно, что вы получаете пустой файл изображения. Получите библиотеку jpeg, которая также будет записывать заголовки и т.д. в файл.

Ответ №1:

Использовать libjpeg . Не пытайтесь переопределить кодировку jpeg самостоятельно, слишком много способов могут пойти не так.

Ответ №2:

Я думаю, вам нужна библиотека JPEG, например libjpeg.

Ответ №3:

Судя по вашему описанию, у вас есть YUV-данные, которые вам нужно преобразовать в jpeg. Правильно? Imagemagick — очень мощный инструмент, который может справиться с этим.

Из статьи Википедии о YUV: Значения Y’ обычно сдвигаются и масштабируются до диапазона [16, 235], а не используются в полном диапазоне [0, 255]. Эта запутанная практика вытекает из стандартов MPEG и объясняет, почему к Y’ добавляется 16 и почему коэффициенты Y’ в базовом преобразовании суммируются до 220 вместо 255. Значения U и V, которые могут быть положительными или отрицательными, суммируются с 128, чтобы они всегда были положительными

Т.е. 0-255 не является допустимым диапазоном для YUV-данных

Ответ №4:

Похоже, что sizeof(двоичный файл) равен 4. Итак, вам нужно получить длину двоичного файла, а не sizeof (указатель). И проще использовать что-то уже готовое, например libjpeg.