SAIL ์ด๋ฏธ์ง€ ๋””์ฝ”๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ์ถœํŒ์‚ฌ : ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ด๋ฏธ์ง€ ๋””์ฝ”๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ SAIL. SAIL์€ C๋กœ ๋‹ค์‹œ ์ž‘์„ฑ๋œ ์˜ค๋žซ๋™์•ˆ ์ง€์›๋˜์ง€ ์•Š์•˜๋˜ ์ด๋ฏธ์ง€ ๋ทฐ์–ด์˜ ์ฝ”๋ฑ ๋ธŒ๋žœ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. KS๋‹ค๋žŒ์ฅ, ๊ทธ๋Ÿฌ๋‚˜ ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒ API์™€ ์ˆ˜๋งŽ์€ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ๊ณ ๊ฐ: ์ด๋ฏธ์ง€ ๋ทฐ์–ด, ๊ฒŒ์ž„ ๊ฐœ๋ฐœ, ๊ธฐํƒ€ ๋ชฉ์ ์„ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ ์ค‘์ด์ง€๋งŒ ์ด๋ฏธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ํ˜ธํ™˜์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŠน์ง• :

  • ํƒ€์‚ฌ ์ข…์†์„ฑ(์ฝ”๋ฑ ์ œ์™ธ) ์—†์ด C๋กœ ์ž‘์„ฑ๋œ ๊ฐ„๋‹จํ•˜๊ณ  ์ปดํŒฉํŠธํ•˜๋ฉฐ ๋น ๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ๊ฐ„๋‹จํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ ๋™์‹œ์— ๋ชจ๋“  ์š”๊ตฌ์— ๋งž๋Š” ๊ฐ•๋ ฅํ•œ API์ž…๋‹ˆ๋‹ค.
  • C++์šฉ ๋ฐ”์ธ๋”ฉ;
  • ์ด๋ฏธ์ง€ ํ˜•์‹์€ ๋™์ ์œผ๋กœ ๋กœ๋“œ๋˜๋Š” ์ฝ”๋ฑ์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ผ, ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” ์ž์ฒด ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ํ™•์žฅ์ž ๋˜๋Š” ๋‹ค์Œ์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋ฏธ์ง€ ์œ ํ˜• ๊ฒฐ์ • ๋งค์ง๋„˜๋ฒ„;
  • ํ˜„์žฌ ์ง€์›๋˜๋Š” ํ˜•์‹: png (์ฝ๊ธฐ, Windows์—๋งŒ ํ•ด๋‹น), JPEG(์ฝ๊ธฐ, ์“ฐ๊ธฐ) PNG(์ฝ๊ธฐ, ์“ฐ๊ธฐ).
    ์ƒˆ๋กœ์šด ํ˜•์‹์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. KSquirrel-libs๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ์•ฝ 60๊ฐ€์ง€ ํ˜•์‹์„ ์ง€์›ํ•˜๋ฉฐ, ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ˜•์‹์ด ์ฒซ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค.

  • ์ฝ๊ธฐ ์ž‘์—…์€ ํ•ญ์ƒ RGB ๋ฐ RGBA ํ˜•์‹์œผ๋กœ ํ”ฝ์…€์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ ์ฝ”๋ฑ์€ ํ›จ์”ฌ ๋” ํฐ ํ˜•์‹ ๋ชฉ๋ก์œผ๋กœ ํ”ฝ์…€์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋ฑ์€ SOURCE ํ”ฝ์…€์„ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋Š” CMYK ๋˜๋Š” YCCK ์ด๋ฏธ์ง€์—์„œ ์ „์ฒด ์ •๋ณด๋ฅผ ์–ป์œผ๋ ค๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ICC ํ”„๋กœํ•„ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
  • C, Qt, SDL์˜ ์˜ˆ;
  • ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ:
    Windows(์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ), macOS(brew) ๋ฐ Linux(Debian).

SAIL์ด ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ:

  • ์ด๋ฏธ์ง€ ํŽธ์ง‘;
  • ๊ธฐ๋ณธ ์ฝ”๋ฑ(libjpeg ๋“ฑ)์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ ์ด์™ธ์˜ ์ƒ‰ ๊ณต๊ฐ„ ๋ณ€ํ™˜ ๊ธฐ๋Šฅ
  • ์ƒ‰์ƒ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ(ICC ํ”„๋กœํŒŒ์ผ ์‚ฌ์šฉ ๋“ฑ)

C์—์„œ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ˆ:

๊ตฌ์กฐ์ฒด ํ•ญํ•ด_์ปจํ…์ŠคํŠธ *์ปจํ…์ŠคํŠธ;

SAIL_TRY(sail_init(&context));

๊ตฌ์กฐ์ฒด ํ•ญํ•ด_์ด๋ฏธ์ง€ *์ด๋ฏธ์ง€;
๋ถ€ํ˜ธ ์—†๋Š” ๋ฌธ์ž *image_pixels;

SAIL_TRY(sail_read(๊ฒฝ๋กœ,
๋ฌธ๋งฅ,
&์˜์ƒ,
(void **)&image_pixels));

/*
* ์—ฌ๊ธฐ์—์„œ๋Š” ์ˆ˜์‹ ๋œ ํ”ฝ์…€์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
* ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ด๋ฏธ์ง€->๋„ˆ๋น„, ์ด๋ฏธ์ง€->๋†’์ด, ์ด๋ฏธ์ง€->bytes_per_line,
* ๋ฐ ์ด๋ฏธ์ง€->pixel_format.
*/

/* ์ •๋ฆฌ */
๋ฌด๋ฃŒ(์ด๋ฏธ์ง€_ํ”ฝ์…€);
ail_destroy_image(์ด๋ฏธ์ง€);

API ๋ ˆ๋ฒจ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…:

  • ์ดˆ๋ณด์ž: "์ด JPEG๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹ถ์–ด์š”."
  • ๊ณ ๊ธ‰: "์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ GIF๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋กœ๋“œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."
  • ์‹ฌํ•ด ๋‹ค์ด๋ฒ„: "์ด ์• ๋‹ˆ๋ฉ”์ด์…˜ GIF๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋กœ๋“œํ•˜๊ณ  ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์ฝ”๋ฑ๊ณผ ํ”ฝ์…€ ์ถœ๋ ฅ์„ ์™„์ „ํžˆ ์ œ์–ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค."
  • ํ…Œํฌ๋‹ˆ์ปฌ ๋‹ค์ด๋ฒ„: โ€œ์œ„์˜ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋‚˜๋งŒ์˜ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹คโ€

๊ฐ™์€ ์ง€์—ญ์˜ ์ง์ ‘์ ์ธ ๊ฒฝ์Ÿ์ž:

  • ํ”„๋ฆฌ์ด๋ฏธ์ง€
  • ์•…๋งˆ
  • SDL_์ด๋ฏธ์ง€
  • WIC
  • imlib2
  • ๋ถ€์ŠคํŠธ.๊ธธ
  • gdk-pixbuf

๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€์˜ ์ฐจ์ด์ :

  • ์ด๋ฏธ์ง€, ํŒ”๋ ˆํŠธ ๋“ฑ ์˜ˆ์ƒ ์—”ํ„ฐํ‹ฐ๊ฐ€ ํฌํ•จ๋œ ํœด๋จผ API
  • ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋ฑ์€ RGB/RGBA ํ”ฝ์…€ ์ด์ƒ์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋ฑ์€ RGB๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ ๋„ ์›๋ณธ ํ”ฝ์…€์„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์–ธ์–ด๋กœ ์ฝ”๋ฑ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ ๋„ ์ฝ”๋ฑ์„ ์ถ”๊ฐ€/์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›๋ณธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
  • 'ํ”„๋กœ๋น™(Probing)'์€ ํ”ฝ์…€ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์ฝ”๋”ฉํ•˜์ง€ ์•Š๊ณ  ์˜์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๋Š” ๊ณผ์ •์ด๋‹ค.
  • ํฌ๊ธฐ์™€ ์†๋„.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€