Выпуск Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ дСкодирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ SAIL 0.9.0-pre12

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ нСсколько Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ дСкодирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ SAIL, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ пСрСписанный Π½Π° Π‘ Ρ€Π΅Π±Ρ€Π΅Π½Π΄ΠΈΠ½Π³ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² ΠΈΠ· Π΄Π°Π²Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ просмотра ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ KSquirrel, Π½ΠΎ с Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ высокоуровнСвого абстрактного API ΠΈ многочислСнными ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌΠΈ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π³ΠΎΡ‚ΠΎΠ²Π° для использования, Π½ΠΎ всё Π΅Ρ‰Ρ‘ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ΡΡ. Бинарная ΠΈ API ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠΊΠ° Π½Π΅ гарантируСтся. ДСмонстрация.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ SAIL

  • Быстрая ΠΈ простая Π² использовании Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°;
  • Написана Π½Π° C11 c Π±ΠΈΠ½Π΄ΠΈΠ½Π³Π°ΠΌΠΈ ΠΊ C++17;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΌΠΈ ΠΊΠΎΠ΄Π΅ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ нСзависимо ΠΎΡ‚ клиСнтской части;
  • Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, памяти, собствСнных источников;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° многостраничных ΠΈ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° популярных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² всё ΠΆΠ΅ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ libjpeg, libpng, ΠΈ Ρ‚.Π΄.
  • ΠšΡ€ΠΎΡΡ-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ: Linux, Windows, macOS;
  • «ΠŸΡ€ΠΎΡ‰ΡƒΠΏΡ‹Π²Π°Π½ΠΈΠ΅» (probing) — ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π±Π΅Π· дСкодирования пиксСлСй;
  • ЧСловСчСскиС названия сущностСй (Π½ΠΈΠΊΠ°ΠΊΠΈΡ… FIMULTIBITMAP);
  • Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись ICC ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ;
  • ΠžΡ‚Π΄Π°Ρ‘Ρ‚ RGBA ΠΈΠ»ΠΈ BGRA пиксСли;
  • ΠžΡ‚Π΄Π°Ρ‘Ρ‚ исходныС пиксСли (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CMYK) Ссли ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠΌ;

Бписок ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

  • Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΎ API. Π‘Ρ‹Π»ΠΎ: struct sail_context *context; SAIL_TRY(sail_init(&context)); struct sail_image *image; unsigned char *image_pixels; SAIL_TRY(sail_read(path, context, &image, (void **)&image_pixels)); … free(image_pixels); sail_destroy_image(image);

    Π‘Ρ‚Π°Π»ΠΎ: struct sail_image *image; SAIL_TRY(sail_read_file(path, &image); … sail_destroy_image(image);

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ BMP, GIF, TIFF;
  • Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² VCPKG Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΠΊΡ€ΠΎΠΌΠ΅ UWP;
  • ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ тСсты ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ;
  • Π‘ΠΈΠ½Π΄ΠΈΠ½Π³ C++ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Ρ‘Π½ Π½Π° C++17;
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСлСния памяти собраны Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… Π±Ρ‹Π»ΠΎ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° свои, Π½ΠΎ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ пСрСкомпиляциСй;
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ CMake find_package() для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ SAIL;
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ статичСской компиляции (SAIL_STATIC=ON);
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ компиляции всСх ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² Π² ΠΎΠ΄Π½Ρƒ ΠΎΠ±Ρ‰ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (SAIL_COMBINE_CODECS=ON);
  • Начата Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ добавлСнию тСстов Π½Π° основС µnit;

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ установки

  • Linux — vcpkg, Ρ‚Π°ΠΊΠΆΠ΅ доступны Debian rules
  • Windows — vcpkg
  • macOS — brew

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ