суббота, 18 октября 2014 г.

Delphi: Быстрое (де)кодирование JPEG с помощью libjpeg-turbo

Как-то раз, вычитывая библиотеку для удаленного наблюдения за рабочим столом, я обратил внимание что куча ресурсов и времени занимает кодирование/декодирование JPEG. Изучив по ускорению этой процедуры сторонние решения, было решено использовать JpegTurbo.

Просто пример JPEG файла

Погуглив был найден проект delphi-jpeg-turbo, реализация которого мне не подошла по следующим причинам:
  • Реализован в виде наследника от TBitmap, я же использую TFastDib для нормальной многопоточной работы;
  • Устаревшие хидеры, автор использует декодирование в RGB формат, а потом попиксельно переводит его в требуемый Windows GDI GBR формат. Это занимает кучу времени, к тому же libjpeg-turbo умеет декодировать сразу в GBR, и в интернете не попалось ни одного примера где так сделано;
  • Загрузка из памяти: libjpeg-turbo имеет функции jpeg_mem_src и jpeg_mem_dest, которые позволяют сразу кодировать/декодировать из буфера не создавая кучу промежуточного кода; 

пятница, 3 октября 2014 г.

О подготовке архива с продуктом к публикации в сети

Зачастую, для распространения цифрового продукта авторы используют архивы, аргументами в пользу которых являются легкость создания, и пользователям удобно их распаковывать, но всегда ли?

Данная статья родилась в результате наблюдения за повторяющимися с завидной регулярностью ошибками в дистрибуции ПО, которых легко можно было бы избежать.

четверг, 2 октября 2014 г.

Сжатие DFM ресурсов в Delphi программах

Захотелось мне как-то попробовать сжать ресурсы dfm форм своего приложения, плюсы довольно спорные (сложные формы могут содержать много графических ресурсов которые в dfm файле хранятся как буфер с bmp, который конечно хочется сжать, так же защита от просмотра и редактирования ресурсов форм), но ведь есть несколько программ позволяющих такое делать, значит кому-то нужно.

Напишем приложение DFMCompressor, которое будет извлекать dfm ресурсы из exe файла, сжимать их и записывать обратно заменяя оригиналы.