¸®´ª½º ±âŸ ÀÚ·á |
---|
Á¦¸ñ | X-Windows Programming #4 1998/07/04 (16:28) |
À̸§ | ±èÈ¿¿ø |
¹øÈ£ | 43 |
Á¶È¸ | 303 |
º»¹® |
¡º¸®´ª½º Çдç-¸®´ª½º °Á / ¿¬Àç (go LINUX)¡» 228¹ø Á¦ ¸ñ:[°Á 04] X ÇÁ·Î±×·¡¹Ö ±âÃÊ : Xlib ¿Ã¸°ÀÌ:geoman (À̸¸¿ë ) 96/03/25 02:07 ÀÐÀ½:2279 °ü·ÃÀÚ·á ¾øÀ½ ----------------------------------------------------------------------------- /* ½ÃÀÛÇÏ´Â Àâ´ã */ Ȥ½Ã ¿©·¯ºÐµé²²¼´Â °ÀÇ ³»¿ëÀ» ¿Ö ÀÌ·¸°Ô ÂÉ°³¼ ¿Ã¸®´Â°¡? ÇÏ´Â »ý°¢À» °¡Áö ½Ç Áöµµ ¸ð¸£°Ú³×¿ä. ½Ã¿ø½º·´°Ô(?) µÎ¼¼ ¹ø¿¡ °ÉÃÄ °ÀÇ ³»¿ëÀ» ´Ù ¿Ã·Á³õÀ¸¸é °¥¹«¸®Çؼ º¸±âµµ ÆíÇÏÁö ¾Ê°Ú´Â°¡?¶ó°í »ý°¢ÇÏ½Ç ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ Àǹ®¿¡ Á¦°¡ º¯¸íÀ» Á» Çؾ߰ڽÀ´Ï´Ù. ¸ðµç °ÍÀ» ´çÀå¿¡ ¾Ë°í ½ÍÀº ºÐµéÀº ¹ú½á Ã¥À» »ç¼ X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ» ¸¶½º ÅÍÇϼ̰ųª ¾Æ´Ï¸é µµÁß¿¡ ±×¸¸µÎ½Å °æ¿ì°¡ ¸¹´Ù°í »ý°¢ÇÕ´Ï´Ù. Á¦°¡ ¿øÇÏ´Â °ÍÀº "ÇÑ »ç¶÷ÀÇ ¿ °ÉÀ½ÀÌ ¾Æ´Ï¶ó ¿ »ç¶÷ÀÇ ÇÑ °ÉÀ½"ÀÔ´Ï´Ù. Àú´Â Á¦ °ÀǸ¦ ¸¶Ä¡ ¼Ò ¼³Ã¥ ÀÐµí ´ëÇϼÌÀ¸¸é ÇÕ´Ï´Ù. ¸®´ª½º µ¿È£È¸¿¡ µé¾î¿À¼Å¼ ´Ù¿î¹ÞÀ» ¸¸ÇÑ °Íµµ ¾ø°í Ưº°È÷ ÇÒ Àϵµ ¾øÀ¸½Ç ¶§, °Á¶õ¿¡ µé¸£¼Å¼ Á¦ °ÀdzëÆ® ÇÑ ¹ø ºÐ·®À» ¹Þ ¾Æº¸½Ã°í 30ºÐ Á¤µµ¸¸ ÀоîÁÖ½Ã¸é¼ Çϳª Çϳª¾¿ X ÇÁ·Î±×·¡¹ÖÀ» Àڱ⠰ÍÀ¸·Î ¸¸µå ¼ÌÀ¸¸é ÇÏ´Â ¹Ù·¥ÀÔ´Ï´Ù. ¸¶À½ ÆíÈ÷ ÀоîÁÖ¼¼¿ä. Á¦´Â ¸Þ´º¾ó, ·¹ÆÛ·±½º °°Àº °ÍÀ» ¸¸µé°í ½ÍÀº »ý°¢Àº ¾ø½À´Ï´Ù. ¸®´ª¼ ¿©·¯ºÐ ÇÑ ºÐ ÇÑ ºÐ²²¼ ±âº» X ÇÁ·Î±×·¡¹Ö °úÁ¤À» ¸¶Ä¡½Ã±æ ¹Ù¶ö »ÓÀÔ´Ï´Ù. ±×·¯¸é ±× Áß¿¡ Á¤¸»·Î ¸¹Àº À¯´ÉÇÑ ¾Æ¸¶Ãß¾î ÇÁ ·Î±×·¡¸ÓµéÀÌ ³ª¿À½Ç °ÍÀÌ°í, ¸®´ª½º´Â ´õ¿í ´õ ¹øâÇÒ °Í ¾Æ´Ï°Ú¾î¿ä? ƯÈ÷ Çѱ¹ÀûÀÎ ÇÁ·Î±×·¥µéÀÌ ³ª¿Â´Ù¸é ¸®´ª½º´Â ´õ ÀÌ»ó ÀϹÝÀεé·ÎºÎÅÍ »ý¼ÒÇÑ ¿î¿µÃ¼Á¦°¡ ¾Æ´Ò °ÍÀÔ´Ï´Ù. Á¦ ±ÛÀº ¿©·¯ ¹ø ÀÐÀ» ¼ö·Ï ºû³ª´Â ±×·± ±ÛÀº ¾Æ´Õ´Ï´Ù. ´ÜÁö ¿©·¯ºÐÀ» X À©µµ¿ì ÇÁ·Î±×·¡¹ÖÀ̶ó´Â ¸Á¸Á´ëÇØ·Î ³ª¾Æ°¥ ¼ö ÀÖ´Â ÀÛÀº ¹è ÇÑ Ã´À» ¸¸µå½Ã´Âµ¥ µµ¿òÀÌ µÇ±æ ¹Ù¶ö »ÓÀÔ´Ï´Ù. °ÀǸ¦ ½ÃÀÛÇÏ°Ú½À´Ï´Ù. 6) ÀÌÁ¦´Â Èæ¹éÀÌ ¾Æ´Ï¶ó Ä®¶ó âÀ» ¸¸µé¾îº¾½Ã´Ù. ¿À´ÃÀº ¾î¶»°Ô »ö»ó(Color)À» ¼¹ö·ÎºÎÅÍ ¾ò¾î³»°í »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇؼ ¾Ë ¾Æº¸±â·Î ÇÏ°Ú½À´Ï´Ù. ±× µ¿¾È °è¼Ó ¹Ì·ï¿Ô´ø ÀÏÀ̱⵵ Çϱ¸¿ä... Áö±Ý±îÁö ¾Æ¹« ¼³¸í¾øÀÌ Àú´Â BlackPixel(), WhitePixel()µîÀÇ ¸ÅÅ©·Î¸¦ ¿¹Á¦¿¡¼ ½á¿Ô½À´Ï´Ù. À̸§ÀÌ ³ªÅ¸³»µí °ËÁ¤»ö/¹é»öÀ» ±¸ÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ¾úÁö¿ä. ÀÌÁ¦´Â ÀÌ°Í ¸»°íµµ ¿ì¸®°¡ ¿øÇÏ´Â »öµéÀ» ÀϹÝÀûÀ¸·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇؼ ¾Ë¾Æº¾ ´Ï´Ù. »ö»ó ¶ÇÇÑ ¼¹ö°¡ °ü¸®ÇÏ°í ÀÖ´Â ÀÚ¿øÀÇ ÇϳªÀÔ´Ï´Ù. µû¶ó¼ âÀ» ¸¸µé¾î ´Þ¶ó°í ¼¹ö¿¡ ¿äûÇÏ°í, Ç¥½ÃÇ϶ó°í ¿äûÇÏ´Â ÀÛ¾÷µé°ú ¸¶Âù°¡ÁöÀÇ °úÁ¤À» °ÅÄ¡°Ô µË´Ï´Ù. ¼¹ö´Â Ä÷¯¸Ê(Color Map)À̶ó°í ÇÏ´Â °ÍÀ» °¡Áö°í ÀÖ½À´Ï´Ù. »ö»óÀ» ³ªÅ¸³»´Â Áö µµ ¶Ç´Â µµÇ¥¸¦ ¶æÇÏÁö¿ä. ÀÌ°ÍÀÌ ¾î¶² Àǹ̸¦ °¡Áö´ÂÁö Àá±ñ ¾Ë¾Æº¸°Ú½À´Ï´Ù. 6-1) Ä÷¯¸ÊÀ̶õ? ÄÄÇ»ÅÍ°¡ »ç¿ëÇÏ°í ÀÖ´Â Ãâ·ÂÀåÄ¡ Áß¿¡ ºñÆ®¸Ê µð½ºÇ÷¹ÀÌ¿¡ ¼ÓÇÏ´Â CRT¶ó´Â °ÍÀÌ ÀÖ½À´Ï´Ù. ¹Ù·Î ¿©·¯ºÐ²²¼ ´« ¾Õ¿¡ µÎ°í °è½Å ¸ð´ÏÅÍÀÌÁö¿ä. ÀÌ ¸ð´ÏÅÍÀÇ ¿ø¸®´Â ¿©·¯ºÐ ¸ðµÎ ¾Æ½Ã´Ù½ÃÇÇ ºûÀÇ 3¿ø»ö¿¡ ´ëÀÀÇÏ´Â 3°³ÀÇ ÀüÀÚÃÑÀÌ ¸ð´ÏÅÍ Ç¥¸é¿¡ ¹ß¶ó Á® ÀÖ´Â RGB Çü±¤¹°Áú¿¡ ¾Ë¸Â°Ô ºñÃçÁüÀ¸·Î½á ¿ì¸®°¡ ¿øÇÏ´Â ¸ðµç »öÀ» ¾ò´Â °ÍÀÔ´Ï ´Ù. ¿ì¸®°¡ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ¿øÇÒ ¶§´Â ºûÀÇ 3¿ø»öÀ» ¾Ë¸Â°Ô ½á¼ ÀüÀÚÃÑÀ» ¹ß»çÇÏÁö¿ä. ±×·±µ¥, ¹Ù·Î ¿©±â¼ ³ë¶û/º¸¶ó/ÀÚÁÖ»ö µîÀ» ±¸ÇöÇÒ ¶§ °ú¿¬ ³ë¶ûÀº RGB ¸¦ °¢°¢ ¾î¶² ³óµµ·Î ¼¯¾î¾ß Çϴ°¡? º¸¶ó/ÀÚÁÖ»öÀº ¾î¶°ÇÑ°¡¸¦ ÀúÀåÇÏ°í Àִ ǥ°¡ ÇÊ¿äÇѵ¥¿ä, ¹Ù·Î ±×°ÍÀÌ Ä÷¯¸ÊÀÔ´Ï´Ù. ¼¹ö´Â Àΰ£ÀÌ ¾Æ´Ï¶ó ±â°èÀ̱⠶§¹®¿¡ ¿ì¸®°¡ yellow¶ó°í ¸»ÇÏ¸é ¾î¶² °ÍÀÎÁö Àü Çô ¾Ë ¹æ¹ýÀÌ ¾ø½À´Ï´Ù. ´ÜÁö ÀڱⰡ °¡Áö°í ÀÖ´Â Ä÷¯¸Ê¿¡¼ yellow¿¡ ÇØ´çµÇ´Â °Í À» ã¾Æ¼ ¸ð´ÏÅÍ¿¡°Ô Àû´çÇÑ ¾çÀÇ RGB Á¶ÇÕÀ» Àü´ÞÇÒ »ÓÀÔ´Ï´Ù. ¾î¶»½À´Ï±î? Ä÷¯ ¸ÊÀ̶ó´Â °ÍÀÌ Á¤¸» Áß¿äÇÑ À§Ä¡¸¦ Â÷ÁöÇÏ°í ÀÖÁö¿ä? ÀÌ°ÍÀÌ ¾û¸ÁÀÌ µÇ¸é ¾î¶»°Ô µÉ ±î¿ä? ÄÄÇ»ÅÍ°¡ Á¤½Å¸øÂ÷¸®°í ³ë¶ûÀ» ¿øÇÒ ¶§ ºÐÈ«À» Ç¥½ÃÇÒ Áöµµ ¸ð¸¨´Ï´Ù. ¼¹ö´Â ±âº»ÀûÀÎ Ä÷¯¸ÊÀ» °¡Áö°í ÀÖ½À´Ï´Ù. 6-2) ¿øÇÏ´Â »öÀ» ¼±ÅÃÇϱâ À§ÇØ °ÅÄ¡´Â °úÁ¤ ¾ÕÀ¸·Î »ö»óÀ» ÀÌ¿ëÇÏ´Â ¾î¶² ÀÛ¾÷µµ ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÃÄ¾ß ÇÕ´Ï´Ù. -1. ±âº» Ä÷¯¸Ê(Default ColorMap)ÀÇ ID¸¦ ¾Ë¾Æ³½´Ù. -2. À§ ±âº» Ä÷¯¸ÊÀ¸·ÎºÎÅÍ ¿øÇÏ´Â »öÀÇ Çȼ¿°ª(Pixel Value)¸¦ ¾Ë¾Æ³½´Ù. ¿¹Á¦ 4) #include <X11/Xlib.h> main() { Display *d; Window Root, w; /* »ö»ó°ªÀ» ¾Ë¾Æ³¾ ¶§ ¾µ º¯¼öµé */ Colormap CMap; XColor color, color_exact; unsigned long Black, Blue; d = XOpenDisplay ( NULL ); /* ¿øÇÏ´Â »ö»ó °ËÁ¤/ÆĶûÀ» ¾ò´Â ºÎºÐ */ CMap = XDefaultColormap ( d, 0 ); XAllocNamedColor ( d, CMap, "black", &color, &color_exact ); Black = color.pixel; XAllocNamedColor ( d, CMap, "blue", &color, &color_exact ); Blue = color.pixel; Root = DefaultRootWindow ( d ); w = XCreateSimpleWindow ( d, Root, 100, 100, 600, 400, 2, Black, Blue ); XMapWindow ( d, w ); XFlush ( d ); sleep(10); XDestroyWindow ( d, w ); XCloseDisplay ( d ); } À§ÀÇ ¿¹¸¦ »ìÆ캸½Ã¸é, »ö»ó°ª(unsigned longÇü °ª) Çϳª ¾ò´Â°Ô ±×·¸°Ô ½¬¿î °ÍÀº ¾Æ´Ï¶ó´Â »ç½ÇÀ» ¹ß°ßÇϼÌÀ» °Ì´Ï´Ù. ¸Ç ¸ÕÀú ÇؾßÇÒ ÀÏÀº Ä÷¯¸ÊÀÇ ID¸¦ ¼¹ö·ÎºÎÅÍ ¾Ë¾Æ³»´Â °ÍÀÔ´Ï´Ù. Colormap Çü º¯¼ö CMapÀ» Çϳª ¼±¾ðÇصξú½À´Ï´Ù. ±×¸®°í ³ª¼ XDefaultColormap() ÇÔ¼ö¸¦ ½á¼ ÇöÀçÀÇ ¼¹ö, ÇöÀçÀÇ ±âº» ȸé(0¹ø ȸé)ÀÇ ±âº» Ä÷¯¸Ê ID¸¦ ¹Ýȯ¹Þ½À´Ï´Ù. ÇÔ¼öÀÇ ¿øÇü : Colormap XDefaultColormap ( Display *d, int screen_no ); ÀÌÁ¦ Ä÷¯¸ÊÀ» ¾Ë¾Æ³ÂÀ¸´Ï, ¿ì¸®°¡ ¿øÇÏ´Â »öÀÇ Çȼ¿°ªÀ» ¾Ë¾Æ³»º¾½Ã´Ù. ÀÌ ¶§¿¡´Â XColor Çü º¯¼ö µÎ °³°¡ ÇÊ¿äÇÕ´Ï´Ù. ±×¸®°í XAllocnamedColor ÇÔ¼ö¸¦ ½á¼ ¼¹ö´õ·¯ ÇÔ¼ö¿¡ ÁÖ¾îÁø Ä÷¯¸Ê¿¡¼ ¿ì¸®°¡ ¿øÇÏ´Â »ö»óÀ̸§À» ã¾Æ¼ ±× »ö »óÀ̸§¿¡ ÇØ´çÇÏ´Â Á¤º¸¸¦ XColorÇü º¯¼ö¿¡ ÀúÀåÇϵµ·Ï ¿äûÇÕ´Ï´Ù. ÇÔ¼öÀÇ ¿øÇü : Status XAllocNamedColor( Display *d, Colormap cmap, _XConst char* color_name, XColor *screen_def_return, XColor *exact_def_return ); ¿©±â¼ ³ª¿À´Â »õ·Î¿î ÀÚ·áÇü¿¡ ´ëÇؼ Áö±Ý ¸ðµÎ ¾Æ½Ç ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ¾Æ¼Å¾ß ÇÑ´Ù°í »ý°¢ÇÒ ¶§ ²À ÀÚ¼¼È÷ ¼³¸íµå¸®°Ú½À´Ï´Ù. ÇÔ¼öÀÇ À̸§ ÀÚü°¡ »ó´çÈ÷ ±æ°í ¼³¸íÀûÀ̱⠶§¹®¿¡ ±× ³»¿ëÀ» ¾Ë¾Æº¸±â ÁÁ½À´Ï´Ù. ¹°·Ð ŸÀÌÇÎÇϱâ´Â ¿©°£ Èûµç°Ô ¾Æ´ÏÁÒ? ÀÌ ÇÔ¼ö´Â À̸§¿¡¼µµ µå·¯³ªµíÀÌ Named Color Áï À̸§ÀÌ ºÙ¾î ÀÖ´Â »ö»ó¿¡ ´ëÇÏ¿©, ¿ì¸®°¡ ÀÌ ÇÔ¼ö¿¡ ÁÖ¼Ò·Î Àü´ÞÇØÁÖ´Â XColor Çü º¯¼ö µÎ °³¿¡ ¾Ë¸Â´Â Á¤º¸¸¦ ÇÒ´ç(Allocation)ÇØÁÝ´Ï´Ù. Çϳª´Â ½ºÅ©¸° ±âº»°ªÀ¸·Î¼ Çϵå¿þ¾îÀûÀ¸·Î °¡Àå ±Ù»çÇÏ°Ô ½ÇÇö½Ãų ¼ö ÀÖ´Â Á¤º¸°¡ µé¾î°¡°í, ³ª¸ÓÁö Çϳª´Â ÁöÁ¤ÇÑ »öÀÇ Á¤È®ÇÑ Á¤º¸°¡ µé¾î°£´Ù°í ÇÕ´Ï´Ù. ¿ì¸®´Â ÀüÀÚ¸¸ »ç¿ë Çϵµ·Ï ÇÏ°Ú½À´Ï´Ù. ¾µ¸¸ÇÑ ±×·¡ÇÈ ÇÁ·Î±×·¥À» ¸¸µé±â À§Çؼ´Â ¾ÆÁÖ Á¤È®ÇÏ°Ô ¾Ë¾Æ¾ß ÇÏ°ÚÁö¸¸ Áö±Ý Á¦°¡ ÇÏ°íÀÚ ÇÏ´Â °ÀÇ´Â À绡¸® X ÇÁ·Î±×·¡¹Ö Àü¹Ý¿¡ ´ëÇÏ ¿© ÈȾ´Â ¼öÁØÀÌ´Ï ÀÌÇØÇϼ¼¿ä. À¸À×? ±×·±µ¥ À̸§ÀÌ ÀÖ´Â »ö»óÀ̶ó´Ï... ÇÏ½Ç ºÐµéÀÌ °è½Ç °Í °°±º¿ä. Àü¹ø fvwm °ÀÇ Áß »ö»ó¼³Á¤ °ÀÇ ¶§ showrgb ¶ó´Â ¸í·ÉÀ» ±â¾ïÇϽʴϱî? ½© »óÅ¿¡¼ showrgb Çغ¸½Ê½Ã¿ä. ±×·¯¸é ÇöÀç ¼¹ö°¡ ÀÌÇØÇÒ ¼ö ÀÖ´Â À̸§ºÙÀº »ö»óµé ¸ñ·ÏÀÌ RGB °ª°ú ÇÔ²² ÁÖ·ç·è ³ªÅ¸³ª°Ô µÉ °Ì´Ï´Ù. ¹Ù·Î ±× ¸ñ·Ï¿¡ ÀÖ´Â °Í µé¸¸À» ¸»ÇÕ´Ï´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â red, yellow, blue, green µîÀÌ ¹Ù·Î ±×°ÍÀÔ´Ï ´Ù. À̺¯ÀÌ ¾ø´Â ÇÑ, ½ÇÆÐÇÏÁö ¾ÊÀ»Å×´Ï »ç½ÇÀº int Çü º¯¼öÀÎ Status¿¡´Â 0ÀÌ ¾Æ´Ñ True °ªÀÌ ¹ÝȯµÇ¾î ¿É´Ï´Ù. ¸¸¾à¿¡ ¹®Á¦°¡ ¹ß»ýÇß´Ù¸é False, 0 ÀÔ´Ï´Ù. ÀÌÁ¦´Â Á¤º¸¸¦ Áö´Ï°í ÀÖ´Â XColor Çü º¯¼ö¸¦ ½á¼ °á±¹¿¡ ¿ì¸®°¡ ¾Ë°í ½Í¾ú´ø °ªÀ» ¾Ë¾Æ³»º¾½Ã´Ù. XColor Çü º¯¼ö´Â Xlib.h ÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Â ±¸Á¶Ã¼ º¯¼ö ·Î¼ ¸î °³ÀÇ »ö»ó¿¡ ´ëÇÑ Á¤º¸¸¦ Áö´Ï°í ÀÖ´Ù°í º¸½Ã¸é µË´Ï´Ù. ¿ì¸®°¡ »ç¿ëÇÒ °ÍÀº ±× Áß¿¡ unsigned long Çü ¸â¹öÀÎ pixel ¸â¹öÀÔ´Ï´Ù. ±× °ªÀ» Black À̳ª Blue º¯¼ö¿¡ ÀúÀå½ÃÄÑ ³õÀ¸¸é µÇ´Â °ÍÀÌÁö¿ä. 6-3) ¿ä¾à »ö»óÀº ¼¹ö°¡ °ü¸®ÇÏ´Â ÀÚ¿øÀÔ´Ï´Ù. À̸¦ »ç¿ëÇϱâ À§Çؼ´Â XDefaultColormap ÇÔ¼ö¸¦ ½á¼ ±âº»ÀûÀÎ Ä÷¯¸Ê ID¸¦ ¾Ë¾Æ³½ ÈÄ, XAllocNamedColor ÇÔ¼ö¸¦ ÅëÇؼ ƯÁ¤ À̸§ÀÇ »ö»ó¿¡ ´ëÇÑ XColor Á¤º¸¸¦ ¾Ë¾Æ³À´Ï´Ù. ±×¸®°í ³ª¼ XColor ±¸Á¶Ã¼ÀÇ pixel ¸â¹ö°ªÀ» Àо½Ã¸é µË´Ï´Ù. ±×·±µ¥, »ö»ó ÇϳªÀÇ Çȼ¿°ªÀ» ¾Ë±â À§Çؼ Ç×»ó ÀÌ·¸°Ô ¸¹Àº °úÁ¤À» °ÅÃÄ¾ß ÇÏ´Ù ´Ï, Á» ³Ê¹«ÇÑ °Í °°ÁÒ? ±×·¸´Ù¸é, ¿©·¯ºÐ²²¼ »ö»óÀ̸§À» Àü´ÞÇØÁÖ¸é, ±× »ö»ó¿¡ °üÇÑ Çȼ¿°ªÀ» ¹ÝȯÇØÁÖ´Â »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ½Ã¸é µÉ °Ì´Ï´Ù. ²À ÇÑ ¹ø ¸¸µé¾îº¸¼¼¿ä. Ã¥À» °¡Áö°í °è½Å ºÐµéÀº ¾Æ½Ç Áöµµ ¸ð¸£°Ú³×¿ä. :) |