масштабирование вывода libjpeg - PullRequest
3 голосов
/ 20 сентября 2011

Позволяет ли libjpeg / иметь процедуры для масштабирования выходного изображения?

У меня есть изображение, которое необходимо изменить при сохранении и загрузке, предоставляя width1, height1 при вводе и получая width2, height2 при выводе, и я действительно не могу использовать что-либо снаружи.

Ответы [ 2 ]

11 голосов
/ 27 марта 2012

Да, libjpeg поддерживает масштабирование изображения, но с некоторыми ограничениями.

Libjpeg версии 8c и выше поддерживает Масштабирование M / 8 , где M - целое число от 1 до 16. Более широко используемая версия 6b libjpeg поддерживает только M с 1, 2, 4 и 8 (т.е. уменьшение масштаба степени 2).

Поставьте масштабирующий числитель и знаменатель для объекта декомпрессии, используя scale_num и scale_denom. Смотрите jpeg_decompress_struct в jpeglib.h. Вы можете обратиться к djpeg.c для примера использования.

Это намного быстрее и потенциально более высокого качества, чем декодирование всего изображения и затем уменьшение масштаба.

1 голос
/ 06 ноября 2011

Нет, вам нужно масштабировать его либо самостоятельно (линейная интерполяция является самой простой и быстрой, но дает квадратные пиксели, билинейные / трилинейные / бикубические - это трикеры, но дают более плавные результаты), либо с помощью библиотеки, которая сделает грязнуюработать для вас (проверьте OpenCV, SDL, imagemagick, libpipi и т. д.)

Подробнее об этом здесь , здесь .

Фактический код для простой интерполяции ближайшего соседа (неоптимизированный):

dest[dx+dy*dest_width] = src[(dx*src_width/dest_width)+(dy*src_height/dest_height)*src_width]

Просто итерируйте dx и dy в соответствии с dest_width и dest_height.Но на самом деле, используйте для этого библиотеку.

...