ืกืคืจื™ื™ืช ืคืขื ื•ื— ืชืžื•ื ื•ืช SAIL ื–ืžื™ื ื”

ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT ื™ืฆื ืœืื•ืจ ืกืคืจื™ื™ืช ืคืขื ื•ื— ืชืžื•ื ื•ืช ื—ื•ืฆื” ืคืœื˜ืคื•ืจืžื•ืช SAIL. SAIL ื”ื•ื ืžื™ืชื•ื’ ืžื—ื“ืฉ ืฉืœ ืจื›ื™ื‘ื™ codec ืžืžืฆื™ื’ ืชืžื•ื ื•ืช ืฉืœื ื ืชืžืš ื‘ืžืฉืš ื–ืžืŸ ืจื‘ ื•ืฉื•ื›ืชื‘ ื‘-C KSquirrel, ืื‘ืœ ืขื API ืžื•ืคืฉื˜ ื‘ืจืžื” ื’ื‘ื•ื”ื” ื•ืฉื™ืคื•ืจื™ื ืจื‘ื™ื. ืงื”ืœ ื™ืขื“: ืฆื•ืคื™ื ื‘ืชืžื•ื ื•ืช, ืคื™ืชื•ื— ืžืฉื—ืงื™ื, ื˜ืขื™ื ืช ืชืžื•ื ื•ืช ืœื–ื™ื›ืจื•ืŸ ืœืžื˜ืจื•ืช ืื—ืจื•ืช. ื”ืกืคืจื™ื™ื” ื ืžืฆืืช ื‘ืคื™ืชื•ื—, ืืš ื”ื™ื ื›ื‘ืจ ื ื™ืชื ืช ืœืฉื™ืžื•ืฉ. ืชืื™ืžื•ืช ื‘ื™ื ืืจื™ ื•ืงื•ื“ ืžืงื•ืจ ืื™ื ื” ืžื•ื‘ื˜ื—ืช ื‘ืฉืœื‘ ื–ื” ืฉืœ ื”ืคื™ืชื•ื—.

ืžืืคื™ื™ื ื™ื:

  • ืกืคืจื™ื™ื” ืคืฉื•ื˜ื”, ืงื•ืžืคืงื˜ื™ืช ื•ืžื”ื™ืจื” ืฉื ื›ืชื‘ื” ื‘-C ืœืœื ืชืœื•ืช ืฉืœ ืฆื“ ืฉืœื™ืฉื™ (ืœืžืขื˜ ืงื•ื“ืงื™ื);
  • API ืคืฉื•ื˜, ืžื•ื‘ืŸ ื•ื‘ื• ื‘ื–ืžืŸ ืจื‘ ืขื•ืฆืžื” ืœื›ืœ ื”ืฆืจื›ื™ื;
  • ื›ืจื™ื›ื•ืช ืขื‘ื•ืจ C++;
  • ืคื•ืจืžื˜ื™ื ืฉืœ ืชืžื•ื ื” ื ืชืžื›ื™ื ืขืœ ื™ื“ื™ ืจื›ื™ื‘ื™ Codec ื”ื˜ืขื•ื ื™ื ื‘ืื•ืคืŸ ื“ื™ื ืžื™;
  • ืงืจื (ื•ื›ืชื•ื‘) ืชืžื•ื ื•ืช ืžืงื•ื‘ืฅ, ื–ื™ื›ืจื•ืŸ, ืื• ืืคื™ืœื• ืžืงื•ืจ ื ืชื•ื ื™ื ืžืฉืœืš;
  • ืงื‘ื™ืขืช ืกื•ื’ ื”ืชืžื•ื ื” ืœืคื™ ืกื™ื•ืžืช ืงื•ื‘ืฅ, ืื• ืœืคื™ ืžืกืคืจ ืงืกื;
  • ื”ืคื•ืจืžื˜ื™ื ื”ื ืชืžื›ื™ื ื›ืจื’ืข: png (ืงืจื™ืื”, Windows ื‘ืœื‘ื“), JPEG (ืงืจื™ืื”, ื›ืชื™ื‘ื”) PNG (ืงืจื™ืื”, ื›ืชื™ื‘ื”).
    ืžืชื‘ืฆืขืช ืขื‘ื•ื“ื” ืœื”ื•ืกืคืช ืคื•ืจืžื˜ื™ื ื—ื“ืฉื™ื. KSquirrel-libs ืชืžื›ื” ื‘ื›-60 ืคื•ืจืžื˜ื™ื ื‘ืฆื•ืจื” ื›ื–ื• ืื• ืื—ืจืช, ื”ืคื•ืจืžื˜ื™ื ื”ืคื•ืคื•ืœืจื™ื™ื ื‘ื™ื•ืชืจ ื”ื ื”ืจืืฉื•ื ื™ื ื‘ืชื•ืจ;

  • ืคืขื•ืœื•ืช ืงืจื™ืื” ื™ื›ื•ืœื•ืช ืชืžื™ื“ ืœื”ืคื™ืง ืคื™ืงืกืœื™ื ื‘ืคื•ืจืžื˜ RGB ื•-RGBA;
  • ืจื›ื™ื‘ื™ codec ืžืกื•ื™ืžื™ื ื™ื›ื•ืœื™ื ืœื”ื•ืฆื™ื ืคื™ืงืกืœื™ื ื‘ืจืฉื™ืžื” ื’ื“ื•ืœื” ืขื•ื“ ื™ื•ืชืจ ืฉืœ ืคื•ืจืžื˜ื™ื;
  • ืจื•ื‘ ื”ืงื•ื“ืงื™ื ื™ื›ื•ืœื™ื ื’ื ืœื”ื•ืฆื™ื ืคื™ืงืกืœื™ื ืžืกื•ื’ SOURCE. ื–ื” ืฉื™ืžื•ืฉื™, ืœืžืฉืœ, ืœืžื™ ืฉืจื•ืฆื” ืœืงื‘ืœ ืžื™ื“ืข ืžืœื ืžืชืžื•ื ื•ืช CMYK ืื• YCCK;
  • ืงืจื™ืื” ื•ื›ืชื™ื‘ืช ืคืจื•ืคื™ืœื™ ICC;
  • ื“ื•ื’ืžืื•ืช ื‘-C, Qt, SDL;
  • ืคืœื˜ืคื•ืจืžื•ืช ื ืชืžื›ื•ืช:
    Windows (ืžืชืงื™ืŸ), macOS (brew) ื•-Linux (Debian).

ืžื” SAIL ืœื ืžืกืคืง:

  • ืขืจื™ื›ืช ืชืžื•ื ื•ืช;
  • ืคื•ื ืงืฆื™ื•ืช ื”ืžืจืช ืžืจื—ื‘ ืฆื‘ืข ืžืœื‘ื“ ืืœื• ื”ืžืกื•ืคืงื•ืช ืขืœ ื™ื“ื™ ืจื›ื™ื‘ื™ ืงื•ื“ืงื™ื (libjpeg ื•ื›ื•');
  • ืคื•ื ืงืฆื™ื•ืช ื ื™ื”ื•ืœ ืฆื‘ืข (ืฉื™ืžื•ืฉ ื‘ืคืจื•ืคื™ืœื™ ICC ื•ื›ื•')

ื”ื“ื•ื’ืžื” ื”ืคืฉื•ื˜ื” ื‘ื™ื•ืชืจ ืœืคืขื ื•ื— ื‘-C:

struct sail_context *ื”ืงืฉืจ;

SAIL_TRY(sail_init(&context));

struct sail_image *ืชืžื•ื ื”;
char unsigned *image_pixels;

SAIL_TRY(sail_read(path,
ื”ึถืงืฉืึตืจ,
&ืชืžื•ื ื”,
(ื‘ื˜ืœ **)&ืคื™ืงืกืœ_ืชืžื•ื ื”));

/*
* ื›ืืŸ ืžืขื‘ื“ื™ื ืืช ื”ืคื™ืงืกืœื™ื ืฉื”ืชืงื‘ืœื•.
* ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ื”ืฉืชืžืฉ ื‘ืชืžื•ื ื”->ืจื•ื—ื‘, ืชืžื•ื ื”->ื’ื•ื‘ื”, ืชืžื•ื ื”->ื‘ืชื™ื_ืœืฉื•ืจื”,
* ื•-image->pixel_format.
*/

/* ืœื ืงื•ืช */
free(image_pixels);
sail_destroy_image(ืชืžื•ื ื”);

ืชื™ืื•ืจ ืงืฆืจ ืฉืœ ืจืžื•ืช API:

  • ื—ื“ืฉ: "ืื ื™ ืจืง ืจื•ืฆื” ืœื”ื•ืจื™ื“ ืืช ื”-JPEG ื”ื–ื”"
  • ืžืชืงื“ื: "ืื ื™ ืจื•ืฆื” ืœื˜ืขื•ืŸ ืืช ื”-GIF ื”ืžื•ื ืคืฉ ื”ื–ื” ืžื”ื–ื™ื›ืจื•ืŸ"
  • ืฆื•ืœืœ ื™ื ืขืžื•ืง: "ืื ื™ ืจื•ืฆื” ืœื˜ืขื•ืŸ ืืช ื”-GIF ื”ืžื•ื ืคืฉ ื”ื–ื” ืžื”ื–ื™ื›ืจื•ืŸ ื•ืœืงื‘ืœ ืฉืœื™ื˜ื” ืžืœืื” ืขืœ ื”-codec ื•ืคืœื˜ ื”ืคื™ืงืกืœื™ื ืฉืื ื™ ื‘ื•ื—ืจ."
  • ืฆื•ืœืœืŸ ื˜ื›ื ื™: "ืื ื™ ืจื•ืฆื” ื”ื›ืœ ืœืžืขืœื”, ื•ืžืงื•ืจ ื”ื ืชื•ื ื™ื ืฉืœื™"

ืžืชื—ืจื™ื ื™ืฉื™ืจื™ื ืžืื•ืชื• ืื–ื•ืจ:

  • FreeImage
  • ืฉื‚ึธื˜ึธืŸ
  • SDL_ืชืžื•ื ื”
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

ื”ื‘ื“ืœื™ื ืžืกืคืจื™ื•ืช ืื—ืจื•ืช:

  • API ืื ื•ืฉื™ ืขื ื™ืฉื•ื™ื•ืช ืฆืคื•ื™ื•ืช - ืชืžื•ื ื•ืช, ืคืœื˜ื•ืช ื•ื›ื•'.
  • ืจื•ื‘ ื”ืงื•ื“ืงื™ื ื™ื›ื•ืœื™ื ืœื”ืคื™ืง ื™ื•ืชืจ ืžืกืชื ืคื™ืงืกืœื™ื RGB/RGBA.
  • ืจื•ื‘ ื”ืงื•ื“ืงื™ื ื™ื›ื•ืœื™ื ืœื”ืคื™ืง ืคื™ืงืกืœื™ื ืžืงื•ืจื™ื™ื ืœืœื ื”ืžืจื” ืœ-RGB.
  • ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืงื•ื“ืงื™ื ื‘ื›ืœ ืฉืคื”, ื•ื’ื ืœื”ื•ืกื™ืฃ/ืœื”ืกื™ืจ ืื•ืชื ืžื‘ืœื™ ืœื”ื“ืจ ืžื—ื“ืฉ ืืช ื›ืœ ื”ืคืจื•ื™ื™ืงื˜.
  • ืฉืžื•ืจ ืžื™ื“ืข ืขืœ ื”ืชืžื•ื ื” ื”ืžืงื•ืจื™ืช.
  • "ื—ื™ื˜ื•ื˜" ื”ื•ื ืชื”ืœื™ืš ื”ืฉื’ืช ืžื™ื“ืข ืขืœ ืชืžื•ื ื” ืžื‘ืœื™ ืœืคืขื ื— ืืช ื ืชื•ื ื™ ื”ืคื™ืงืกืœื™ื.
  • ื’ื•ื“ืœ ื•ืžื”ื™ืจื•ืช.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”