ΠΡΡ Π° ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ SAIL, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡΠΈ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° C Π½Π° ΠΊΠΎΠ΄Π΅ΡΠΈΡΠ΅ ΠΎΡ ΠΎΡΠ΄Π°Π²Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ KSquirrel, Π½ΠΎ Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ΅Π½ API Π½Π° Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π΅ Π³ΠΎΡΠΎΠ²Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ. ΠΠ²ΠΎΠΈΡΠ½Π°ΡΠ° ΠΈ API ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠ° Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π°. ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° SAIL
- ΠΡΡΠ·Π° ΠΈ Π»Π΅ΡΠ½Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°;
- ΠΠ°ΠΏΠΈΡΠ°Π½ Π½Π° C11 Ρ ΠΎΠ±Π²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΊΡΠΌ C++17;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΡΠ΅Π· Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅Π΄Π΅Π½ΠΈ ΠΊΠΎΠ΄Π΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°ΡΠ° ΡΡΡΠ°Π½Π°;
- Π§Π΅ΡΠ΅Π½Π΅ ΠΎΡ ΡΠ°ΠΉΠ», ΠΏΠ°ΠΌΠ΅Ρ, ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ ΠΈ Π°Π½ΠΈΠΌΠΈΡΠ°Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ;
- ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ libjpeg, libpng ΠΈ Π΄Ρ.
- ΠΡΠΎΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½ΠΈ: Linux, Windows, macOS;
- βΠ‘ΠΎΠ½Π΄ΠΈΡΠ°Π½Π΅β - ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±Π΅Π· Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΈΠΊΡΠ΅Π»ΠΈ;
- ΠΠΌΠ΅Π½Π° Π½Π° ΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ (Π±Π΅Π· FIMULTIBITMAP);
- Π§Π΅ΡΠ΅Π½Π΅ ΠΈ ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ICC ΠΏΡΠΎΡΠΈΠ»ΠΈ;
- ΠΠ·ΠΏΡΠ°ΡΠ° RGBA ΠΈΠ»ΠΈ BGRA ΠΏΠΈΠΊΡΠ΅Π»ΠΈ;
- ΠΡΡΡΠ° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈ ΠΏΠΈΠΊΡΠ΅Π»ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ CMYK), Π°ΠΊΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΎΡ ΠΊΠΎΠ΄Π΅ΠΊΠ°;
Π‘ΠΏΠΈΡΡΠΊ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ:
- API Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ ΠΈ ΠΎΠΏΡΠΎΡΡΠ΅Π½. ΠΠ΅ΡΠ΅: struct sail_context *ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ; SAIL_TRY(sail_init(&ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ)); struct sail_image *ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅; unsigned char *image_pixels; SAIL_TRY(sail_read(path, context, &image, (void **)&image_pixels)); ... free(image_pixels); sail_destroy_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 ΡΡΡΠΎ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ
- Windows - vcpkg
- macOS - Π²Π°ΡΡ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru