#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.
- Независимая группа JPEG: http://www.ijg.org /
- Информация:http://en.wikipedia.org/wiki/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.