|
°ÁÂ Àü ÇÊÀÚÀÇ Àâ´ã>
ÀÌ °Á´ À̱¤¼ö´ÔÀÌ ¹ø¿ªÇØÁֽŠCode ProjectÀÇ ¾ÆÆ¼Å¬ÀÔ´Ï´Ù. ±×·¯¹Ç·Î, ¾ÆÆ¼Å¬ ÀÚüÀÇ ÀúÀÛ±ÇÀº ´ÙÀ½ ¸µÅ©¿¡ ÀÖÀ½À» ±â¾ïÇϽñ⠹ٶø´Ï´Ù.
http://www.codeproject.com/aspnet/ajax_scribble.asp
°Á¿¡¼ À̾߱âÇÏ´Â ¼Ò½ºµµ À§ÀÇ ¸µÅ©¿¡¼ ´Ù¿î·Îµå°¡ °¡´ÉÇÕ´Ï´Ù.
¾à°£ÀÇ »çÁ·À» ºÙÀÌÀÚ¸é, Atlas´Â ¾ÆÁ÷ º£Å¸¹öÀüÀÇ ±â¼úÀ̸ç, 2006³â Áß¹Ý ¸±¸®ÁîµÉ °ÍÀ¸·Î º¸ÀÔ´Ï´Ù.
ÀÌ °Á´ Atlas January 2006 ¹öÀüÀ» ÀÌ¿ëÇÑ °ÍÀ¸·Î º¸À̱⿡, ¿©·¯ºÐÀÌ ´õ ÃֽйöÀüÀÇ Atlas¸¦ ¼³Ä¡Çϰí
À̸¦ ±¸µ¿ÇÒ °æ¿ì ¿Ã¹Ù¸£°Ô µ¿ÀÛÇÏÁö ¾ÊÀ» °¡´É¼ºÀÌ ÀÖÀ½À» ¹Ì¸® ÁÖÀǵ帳´Ï´Ù.
¹ø¿ª ½ÃÁ¡¿¡¼ ASP.NET 'Atlas' Web Site Template ÀÇ ÃֽйöÀüÀº January 2006 Release ÀÔ´Ï´Ù
|
µé¾î°¡±â
ASP.NET Atlas´Â AJAX Çü½Ä ¾ÖÇø®ÄÉÀ̼ǵéÀ» ASP.NET¿¡¼ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï °³¹ßÇÑ Å¬¶óÀ̾ðÆ®Ãø°ú ¼¹öÃø ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ÀÌ Æ©Å丮¾ó(¾Æ¸¶µµ ½Ã¸®Áî·Î ¹ßÀüÇÒ ¼ö ÀÖ´Â)Àº AtlasÀÇ À¯¿ë¼º¿¡ ´ëÇÑ ÀϹÝÀûÀÎ °üÁ¡À» Á¦°øÇÕ´Ï´Ù. Atlas´Â ¸Å¿ì ±¤´ëÇÑ ¶óÀ̺귯¸®À̱⠶§¹®¿¡ ù ¹øÂ° Æ©Å丮¾óÀº Atlas¿¡¼ °¡Àå Áß¿äÇÑ µÎ °¡Áö¿¡ ÁýÁßÇϵµ·Ï ÇϰڽÀ´Ï´Ù.
1. Ŭ¶óÀÌ¾ðÆ® Ãø ½ºÅ©¸³Æ®·ÎºÎÅÍ ¼¹öÃø À¥¼ºñ½º È£Ãâ °¡´É
2. ºê¶ó¿ìÀú°£ ȣȯµÇ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ÄÚµå °³¹ßÀ» ¼Õ½±°Ô
¹è°æ
MFC Scribble ¾ÖÇø®ÄÉÀ̼ÇÀº Á¦°¡ MFC¸¦ ¹è¿ï ¶§ »ç¿ëÇß´ø ù ¹øÂ° ÇÁ·Î±×·¥ °¡¿îµ¥ ÇϳªÀÔ´Ï´Ù. ±×·¯¹Ç·Î, Àú´Â ÀÌ Æ©Å丮¾ó¿¡¼ Scribble¸¦ ±â¹Ý¿¡ µÎ±â·Î °á½ÉÇß½À´Ï´Ù. Scribble ¾ÖÇø®ÄÉÀ̼ÇÀº »ç¿ëÀÚ°¡ ¸¶¿ì½º¸¦ ÀÌ¿ëÇØ¼ ÀÚÀ¯·Ó°Ô ½ºÄÉÄ¡ÇÒ ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. Àú´Â ÀÌ¿Í À¯»çÇÑ ÇÁ·Î±×·¥À» ÀÎÅͳݿ¡¼ ±¸ÇöÇÑ °ÍÀº óÀ½ º¸¾Ò´Âµ¥, JavaScript Draw¶ó´Â À¥»çÀÌÆ®¿´°í AJAX ±â¼úÀ» ÀÌ¿ëÇß½À´Ï´Ù. JavaScript draw À¥»çÀÌÆ®´Â ¿ÀÁ÷ ¸ðÁú¶ó ÆÄÀÌ¾îÆø½º¿¡¼¸¸ µ¿ÀÛÇÕ´Ï´Ù. ÀÌ ¾ÆÆ¼Å¬¿¡¼´Â ±× ¾ÖÇø®ÄÉÀ̼ÇÀÌ ºê¶ó¿ìÀú°£¿¡ ȣȯµÇ´Â ¹öÀüÀ» ¾î¶»°Ô ºôµåÇÏ´ÂÁö ¼³¸íÇÕ´Ï´Ù. ¿ì¸®´Â ÀÌ ½Ã¸®Áî¿¡¼ ¸Å ¾ÆÆ¼Å¬ ¸¶´Ù ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀ» ºôµåÇÏ¸é¼ Atlas¿¡ ´ëÇØ Á¡Â÷ ¼³¸íÇÏ´Â ¹æ½ÄÀ¸·Î ³ª¾Æ°¡µµ·Ï ÇϰڽÀ´Ï´Ù.
Atlas ¼³Ä¡
ÀÌ ¾ÆÆ¼Å¬À» ÀÛ¼ºÇÏ´Â ½ÃÁ¡¿¡¼, December CTP of Atlas´Â ÀÌ link¸¦ Ŭ¸¯ÇÏ¸é ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à ÀÌ ¸µÅ©°¡ µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é Atlas À¥»çÀÌÆ®¿¡¼ Á¤È®ÇÑ ¸µÅ©¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. Atlas ¶óÀ̺귯¸®´Â Visual Studio 2005 template (VSI)¿¡¼ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ù¿î·Îµå »çÀÌÆ®¿¡ °¡½Ã¸é ÅÛÇø´À» ¾î¶»°Ô ¼³Ä¡ÇÒ ¼ö ÀÖ´Â Áöµµ Âü°íÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.
Atlas ÇÁ·ÎÁ§Æ® »ý¼º
Atlas ÅÛÇø´ÀÌ ¼³Ä¡µÇ¸é ¸Þ´º ¿É¼Ç¿¡¼ ÆÄÀÏ -> »õ·Î¸¸µé±â -> À¥ »çÀÌÆ® ¸¦ Â÷·Ê´ë·Î Ŭ¸¯ÇØ »õ·Î¿î ºó Atlas ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. Â÷·Ê´ë·Î ÇÏ¸é ¾Æ·¡ º¸ÀÌ´Â ¹Ù¿Í °°ÀÌ »õ À¥ »çÀÌÆ® ´ÙÀ̾ó·Î±× ¹Ú½º°¡ ³ªÅ¸³³´Ï´Ù.
¾Æ·¡ À§Ä¡¿¡¼ ÆÄÀÏ ½Ã½ºÅÛ À̳ª HTTP¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù. HTTP¸¦ ¼±ÅÃÇϸé IIS server¿¡¼ À¥ »çÀÌÆ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÆÄÀÏ ½Ã½ºÅÛÀ» ¼±ÅÃÇÏ¸é ·ÎÄà ÆÄÀÏ ½Ã½ºÅÛ(ASP.NET °³¹ß À¥ ¼¹ö¸¦ ÀÌ¿ëÇØ¼ µð¹ö±ëÇϰí Å×½ºÆ® ÇÒ ¼ö ÀÖ´Â)¿¡¼ À¥ »çÀÌÆ®¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. µÑ Áß ¾î´À ÂÊÀ» ¼±ÅÃÇÏ´ø ¹«°üÇÏÁö¸¸, Àú´Â ÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀÌ IISÀÇ ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿¡¼ ´õ ÁÁÀ» µí ÇÏ´Ù°í ¸»¾¸µå¸®°í ½Í½À´Ï´Ù.
Atlas ºó ÇÁ·ÎÁ§Æ®
»õ·Î »ý¼ºµÈ Atlas À¥ »çÀÌÆ®´Â µð·ºÅ丮 ±¸Á¶¸¦ µû¸£°Ô µË´Ï´Ù.
- App_Data
: µ¥ÀÌÅÍ ÆÄÀÏÀ» À§Ä¡½Ãų ¼ö ÀÖ´Â ºó µð·ºÅ丮
- Bin
: Microsoft.Web.Atlas ¾î¼Àºí¸®¸¦ À§ÇÑ dll ÆÄÀÏÀÌ À§Ä¡ÇÏ´Â µð·ºÅ丮·Î Atlas ¶óÀ̺귯¸®ÀÇ
¼¹ö ¿µ¿ªÀ» °¡Áý´Ï´Ù.
- ScriptLibrary
: ¾ÖÇø®ÄÉÀ̼ǿ¡ »ç¿ëÇÏ´Â ¾î¶°ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀÌ À§Ä¡ÇÏ´Â µð·ºÅ丮
- Atlas
: Atlas Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®µéÀº µÎ °¡Áö ´Ù¸¥ ÇÏÀ§ µð·ºÅ丮¿¡ Á¸ÀçÇÕ´Ï´Ù.
Debug
: µð¹ö±× ¹öÀü Atlas Ŭ¶óÀ̾ðÆ®Ãø ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀº µð¹ö±× µð·ºÅ丮¿¡ À§Ä¡ÇÕ´Ï´Ù.
Release
: ¸±¸®Áî ¹öÀü Atlas Ŭ¶óÀ̾ðÆ®Ãø ÀÚ¹Ù½ºÅ©¸³Æ® ÆÄÀϵéÀº ¸±¸®Áî µð·ºÅ丮¿¡ À§Ä¡ÇÑ´Ù.
ÀÌ µð·ºÅ丮¿¡ À§Ä¡ÇÑ ½ºÅ©¸³Æ®µéÀº µð¹ö±× Äڵ尡 Á¦°ÅµÈ »óÅ·Π°æ·®ÈµÇ¾î ¾²ÀÔ´Ï´Ù.
Atlas Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®
Atlas December release´Â ´ÙÀ½°ú °°Àº Ŭ¶óÀÌ¾ðÆ® ½ºÅ©¸³Æ®¸¦ °¡Áý´Ï´Ù.
- Atlas.js
: ÀÌ ÇÙ½É Atlas ½ºÅ©¸³Æ® ÆÄÀÏÀº ±âº»ÀûÀÎ À¯¿ëÇÑ ±â´É°ú Ŭ¶óÀ̾ðÆ®Ãø ÄÁÆ®·Ñ,
ÄÄÆ÷³ÍÆ®µéÀ» °¡Áö°í ÀÖ½À´Ï´Ù.
- AtlasCompat.js
: ÀÌ ÆÄÀÏÀº ¸ðÁú¶ó ÆÄÀÌ¾îÆø½º¿Í ¾ÖÇà ¾ÆÀÌ¸Æ »çÆÄ¸® À¥ ºê¶ó¿ìÀú¸¦ À§ÇØ Á¦°øµÇ´Â Atlas ȣȯ ·¹À̾
Æ÷ÇÔÇϰí ÀÖ´Ù. ÀÌ ½ºÅ©¸³Æ®´Â Atlas Äڵ尡 ºê¶ó¿ìÀú°£ ȣȯµÉ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
- AtlasCompat2.js
: »çÆÄ¸® À¥ ºê¶ó¿ìÀú ȣȯÀ» À§ÇÑ Ãß°¡ÀûÀÎ ±â´ÉµéÀÌ ÀÖ½À´Ï´Ù.
- AtlasRuntime.js
: ÇÙ½É Atlas ½ºÅ©¸³Æ® ÆÄÀÏÀ» ÃÖ¼ÒÈÇÑ ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏÀº Ŭ¶óÀ̾ðÆ®Ãø ÄÄÆ÷³ÍÆ®¿Í
ÄÁÆ®·ÑµéÀ» °¡ÁöÁö ¾Ê½À´Ï´Ù. ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏÀº À¥ ÆäÀÌÁö¿¡¼ »ç¿ëµÇÁö ¾Ê´Â ¾Õ¼ ¸»ÇÑ ÄÄÆ÷³ÍÆ®¿Í
ÄÁÆ®·ÑµéÀ» »ç¿ëÇϰíÀÚ ÇÒ ¶§ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
- AtlasUIDragDrop.js
: ÀÌ ÆÄÀÏ¿¡´Â À¥ ÆäÀÌÁö¿¡¼ µå·¡±× & µå¶ø ±â´ÉµéÀ» Á¦°øÇϱâ À§ÇÑ À¯¿ëÇÑ ±â´ÉµéÀÌ ´ã°ÜÁ® ÀÖ½À´Ï´Ù.
- AtlasUIGlitz.js
: ÀÌ ÆÄÀÏ¿¡´Â À¥ ÆäÀÌÁö¿¡¼ ¾Ö´Ï¸ÞÀ̼ǰú ´Ù¸¥ Ưº°ÇÑ È¿°ú¸¦ Á¦°øÇϱâ À§ÇÑ À¯¿ëÇÑ ±â´ÉµéÀÌ
´ã°ÜÁ® ÀÖ½À´Ï´Ù.
- AtlasUIMap.js
: ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏÀº Virtual Earth¸¦ »ç¿ëÇϱâ À§ÇÑ Atlas ¸ÊÇÎ ÇÁ·¹ÀÓ¿öÅ©ÀÔ´Ï´Ù.
´Ù¸¥ ÆÄÀϵé
Atlas´Â À¥ »çÀÌÆ®ÀÇ ·çÆ® µð·ºÅ丮¿¡ ´ÙÀ½°ú °°Àº ÆÄÀϵéÀ» Ãß°¡ÀûÀ¸·Î Á¦°øÇÕ´Ï´Ù.
- Default.aspx ¿Í Default.aspx.cs
: ÀÌ À¥ ÆäÀÌÁö´Â Atlas Ŭ¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®¸¦ ÂüÁ¶ÇÏ´Â ·»Å͸µ ½ºÅ©¸³Æ® ºí·ÏÀ» °¨´çÇϰí ÀÖ´Â
Atlas ½ºÅ©¸³Æ® ¸Å´ÏÀú ÄÁÆ®·ÑÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. Ãß°¡ÀûÀ¸·Î Ŭ¶óÀÌ¾ðÆ® test/xml-script ºí·ÏÀÌ
ÆäÀÌÁö¿¡ ÀÖ½À´Ï´Ù. ÀÌ ½ºÅ©¸³Æ® ºí·ÏÀº ¼±¾ðµÈ XML ±¸¹®À» »ç¿ëÇϰíÀÚ ÇÒ ¶§ ¾²ÀÔ´Ï´Ù.
- eula.rtf
- readme.txt
- Web.Config
web.config´Â Atlas ¾ÖÇø®ÄÉÀ̼ÇÀÌ µ¿ÀÛÇϴµ¥ ²À ÇÊ¿äÇÑ ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ÆÄÀÏ¿¡´Â Atlas ¿Í ´Ù¸¥ Ãß°¡ÀûÀÎ Atlas HTTP ¸ðµâ, HTTP Çڵ鷯¸¦ ƯÁ¤Çϱ⠼³Á¤Çϱâ À§ÇÑ ¸î °¡Áö ³»¿ëµéÀÌ ÀÖ½À´Ï´Ù.
Scribble ¾ÖÇø®ÄÉÀ̼Ç
Scribble ¾ÖÇø®ÄÉÀ̼ÇÀº »ç¿ëÀÚ°¡ ¿ÞÂÊ ¸¶¿ì½º ¹öưÀ» Ŭ¸¯ÇÏ°í ¿òÁ÷ÀÌ¸é¼ ÀÚÀ¯·Ó°Ô ½ºÄÉÄ¡ÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. ½ºÄÉÄ¡´Â »ç¿ëÀÚ°¡ ¸¶¿ì½º ¹öưÀ» ³õ¾ÒÀ» ¶§³ª µå·ÎÀ® ¹üÀ§¸¦ ¹þ¾î³µÀ» ¶§ ³¡³ª°Ô µË´Ï´Ù. ÀÌ·± ±×¸®±â´Â VMLÀ» ÀÌ¿ëÇÑ ÀÚ¹Ù½ºÅ©¸³Æ®¸¦ ÅëÇØ¼ ±¸ÇöÇÏÁö¸¸, ÀÌ·± ¿¹Á¦°¡ VML »ç¿ë¿¡ ´ëÇÑ ³»¿ëÀ¸·Î °¡Áö´Â ¾ÊÀ» °ÍÀÔ´Ï´Ù.
Scribble ±âº» À¥ ÆäÀÌÁö´Â À̹ÌÁö¸¦ °®½À´Ï´Ù(ÀϹÝÀûÀÎ HTML À̹ÌÁö - IMG ű×). À̹ÌÁö¿¡¼ ÀÏ¾î³ »ç¿ëÀÚÀÇ ¸¶¿ì½º À̺¥Æ®´Â ÀÚ¹Ù½ºÅ©¸³Æ® À̺¥Æ® Çڵ鷯¿¡ ÀÇÇØ¼ ĸÃĵ˴ϴÙ. ÀÚ¹Ù½ºÅ©¸³Æ® ±â´ÉÀº ½ºÄÉÄ¡µÈ Á¡µéÀ» À¥ ¼ºñ½º·Î º¸³À´Ï´Ù. À¥ ¼ºñ½º´Â ¾÷µ¥ÀÌÆ®µÇ°í À̹ÌÁö °´Ã¼´Â Ŭ¶óÀÌ¾ðÆ®°¡ º¸³½ ¸ðµç Á¡µéÀ» ÅëÇØ¼ ¼±µéÀ» ±×·Á³»°í ¼¼¼Ç ¾È¿¡ ÀúÀåµË´Ï´Ù. °á±¹¿£, Ŭ¶óÀÌ¾ðÆ® ¿äû¿¡ ÀÇÇØ ¼¹ö·ÎºÎÅÍ À̹ÌÁö°¡ ¾÷µ¥ÀÌÆ® µË´Ï´Ù. ÀÌ À̹ÌÁö ¼Ò½º´Â HTTP Çڵ鷯¿¡ ÀÇÇØ ¼¼¼Ç¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ Ŭ¶óÀÌ¾ðÆ®¿¡°Ô Ãâ·ÂµË´Ï´Ù. ¿©±â¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀÎ ÄÄÆ÷³ÍÆ®µéÀÌ ÀÖ½À´Ï´Ù.
- Default.aspx
: ´ÙÀ̳ª¹ÍÇÑ À̹ÌÁö¿Í Atlas ½ºÅ©¸³Æ® ¸Å´ÏÀú ÄÜÆ®·ÑÀÌ ÀÖ´Â ÆäÀÌÁö
- ScribbleImage.ashx
: ¼¼¼Ç¿¡ ÀúÀåµÈ À̹ÌÁö °´Ã¼¸¦ Ãâ·ÂÇÏ´Â HTTP Çڵ鷯
- ScribbleService.asmx
: ¸ðµç ½ºÅ©·¹Äª ¿äûÀ» º¸³»ÁÖ´Â À¥ ¼ºñ½º. À̹ÌÁö¸¦ ¼öÁ¤ÇÕ´Ï´Ù.
- Scribble.js
: ÆÄÀÏ ¾È¿¡ Æ÷ÇÔµÈ µðÀÚÀΰú Äڵ带 ±ò²ûÇÏ°Ô ºÐ¸®½ÃÄÑ ¾ÖÇø®ÄÉÀ̼ǿ¡ Àç¹èÄ¡ÇÏ´Â ÀÚ¹Ù½ºÅ©¸³Æ® ÄÚµå
- Global.asax
Session_Start ¿Í Session_End À̺¥Æ®´Â Global.asax¿¡¼ ´Ù·ïÁý´Ï´Ù. Session_Start´Â »ç¿ë °¡´ÉÇÑ ¼¼¼ÇÀ» »ý¼ºÇϰí, Session_End´Â ¼¼¼Ç¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ ÇØÁ¦½Ãŵ´Ï´Ù.
Global.asax
¿ì¸®´Â Global.asax. ¿¡¼ ÄÚµù °úÁ¤À» ½ÃÀÛÇÕ´Ï´Ù.
1. À¥ »çÀÌÆ® ¸Þ´º¿¡¼ »õ Ç׸ñ Ãß°¡ ¶Ç´Â Ctrl + Shift + A¸¦ ´©¸¨´Ï´Ù.
2. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼ Àü¿ª ÀÀ¿ë ÇÁ·Î±×·¥ Ŭ·¡½º¸¦ ¼±ÅÃÇϰí Ŭ¸¯ÇÏ¸é µË´Ï´Ù. ´ç½ÅÀº Global.asax ÆÄÀÏÀÌ »ý¼ºµÈ °ÍÀ» º¼ °ÍÀÔ´Ï´Ù.
3. ¿ì¸®´Â System.Drawing ³×ÀÓ½ºÆäÀ̽º¸¦ ÀÓÆ÷Æ®ÇÏ´Â °ÍÀ¸·Î ½ÃÀÛÇÒ °Ì´Ï´Ù. ´ÙÀ½ ÁÙ¿¡ ³ª¿À´Â Äڵ带 ù ÁÙ¿¡ »ðÀÔÇØÁÖ¼¼¿ä.
|
<%@ Import Namespace="System.Drawing" %>
|
4. ÀÌ¾î¼ Session_Start ±â´É Äڵ带 »ðÀÔÇØ ÁÖ¼¼¿ä.
void Session_Start(object sender, EventArgs e)
{
Bitmap bmp = new Bitmap(200, 200);
using (Graphics g = Graphics.FromImage(bmp))
{
g.FillRectangle(new SolidBrush(Color.White),
new Rectangle(0, 0, bmp.Width, bmp.Height));
g.Flush();
}
Session["Image"] = bmp;
}
|
ÀÌ ÄÚµå´Â Èò 200Çȼ¿µé·Î ¹è°æÀÌ ¿ÏÀüÈ÷ ÇϾé°Ô Ä¥ÇØÁ® ÀÖ°í ImageÀ̶ó´Â À̸§ÀÇ ¼¼¼ÇÀÌ ÇÒ´çµÈ °£´ÜÇÑ ºñÆ®¸Ê 200 Çȼ¿À» »ý¼ºÇÕ´Ï´Ù.
5. Session_End ±â´ÉÀº ¼¼¼Ç¾È¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ ÇØÁ¦ÇÕ´Ï´Ù.
Bitmap bmp = (Bitmap)Session["Image"];
bmp.Dispose();
|
6. À¥ »çÀÌÆ® ¸Þ´º¿¡¼ ÂüÁ¶ Ãß°¡¸¦ ¼±ÅÃÇÕ´Ï´Ù.
7. ÂüÁ¶ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼ System.DrawingÀ» ¼±ÅÃÇϰí, È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù.
8. ¸¶Áö¸·À¸·Î, ºôµå ¸Þ´º¿¡¼ À¥ »çÀÌÆ® ºôµå ¶Ç´ÂCtrl + Shift + B ¸¦ ´©¸£¸é ºôµå ¿¡·¯°¡ ¾ø´Ù´Â °ÍÀ» È®½ÅÇÕ´Ï´Ù.
ScribbleImage.ashx
À¥ Çڵ鷯´Â ¼¼¼Ç º¯¼ö¾È¿¡ ÀúÀåµÈ À̹ÌÁö¸¦ ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®¿¡ Ãâ·ÂÇϱâ À§ÇÑ ¸ñÀûÀÔ´Ï´Ù.
1. À¥ »çÀÌÆ® ¸Þ´º¿¡¼ »õ Ç׸ñ Ãß°¡ ¶Ç´Â Ctrl + Shift + A¸¦ ´©¸¨´Ï´Ù.
2. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼ Á¦³×¸¯ 󸮱⸦ ¼±ÅÃÇϰí, À̸§À» ScribbleImage.ashx ¶ó°í ÀÔ·ÂÇÑ ÈÄ È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù.
3. À¥ Çڵ鷯´Â ÇÊ¿äÇÑ ÀÎÅÍÆäÀ̽º IRequiresSessionState¸¦ ±¸ÇöÇÒ ¶§ ¼¼¼Ç º¯¼ö¸¦ »ç¿ëÇϱâ À§Çؼ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ°Ç ´ÜÁö Ç¥½ÃÀÚ ÀÎÅÍÆäÀ̽º(marker interface)ÀÌ¸ç ¿À¹ö¶óÀ̵åÇϱâ À§ÇÑ ¸Þ¼Òµå¸¦ °¡ÁöÁö ¾Ê½À´Ï´Ù. º¸ÀÌ´Â ¹Ù´ë·Î Ŭ·¡½º ¼±¾ðÀ» ¼öÁ¤ÇÕ´Ï´Ù.
public class ScribbleImage : IHttpHandler,
System.Web.SessionState.IRequiresSessionState
|
4. ´ÙÀ½¿¡ ProcessRequest ¸Þ¼Òµå Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "image/png";
context.Response.Cache.SetNoStore();
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetExpires(DateTime.Now);
context.Response.Cache.SetValidUntilExpires(false);
System.Drawing.Bitmap bmp =
(System.Drawing.Bitmap)context.Session["Image"];
lock(bmp)
{
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, ImageFormat.Png);
ms.Flush();
context.Response.BinaryWrite(ms.GetBuffer());
}
}
}
|
o ù° ÁÙ ContentType Çì´õ´Â image/png ¿¡ ¹ÝÀÀÇϵµ·Ï ¼³Á¤ÇÕ´Ï´Ù. ÀÌ´Â ºê¶ó¿ìÀú°¡ HTML ´ë½Å¿¡ png À̹ÌÁö¿¡ ¹ÝÀÀÇϵµ·Ï ±¸º°ÇÕ´Ï´Ù.
o ´ÙÀ½ ³× ÁÙÀº ¹ÝÀÀÇÒ ¶§ ij½ÃÇÏÁö ¾Êµµ·Ï ºê¶ó¿ìÀú¿¡ Áö½ÃÇÕ´Ï´Ù. ÀÌ ÄÚµåµéÀº »óÈ£ ºê¶ó¿ìÀú°£ ȣȯµÇµµ·Ï Çϱ⠶§¹®¿¡ ²À ÇÊ¿äÇÕ´Ï´Ù. ¿ì¸®´Â ³ªÁß¿¡ Æ©Å丮¾ó¿¡ ¸ÂÃß¾î ¹Ù²Ü °ÍÀÔ´Ï´Ù.
o ¸¶Áö¸·À¸·Î, ¼¼¼Ç º¯¼ö·ÎºÎÅÍ ¿Â ºñÆ®¸ÊÀº ¸Þ¸ð¸® ½ºÆ®¸²¿¡ ÀúÀåÀÌ µÇ°í, ÀúÀåµÈ ¸Þ¸ð¸® ½ºÆ®¸²ÀÇ ³»¿ëÀº ÀÀ´ä(response)½Ã ¾¹´Ï´Ù. BinaryWrite ±â´ÉÀÌ »ç¿ëµÇ°í, À̹ÌÁö´Â ¹ÙÀ̳ʸ® µ¥ÀÌÅÍÀÔ´Ï´Ù.
ScribbleService.asmx
¼¼¼Ç À̹ÌÁö¸¦ ÃʱâÈÇϰí ÀÀ´ä ½Ã À̹ÌÁö ³»¿ëÀ» Ãâ·ÂÇØ¾ß ÇÕ´Ï´Ù. ÀÌÁ¦ À̹ÌÁö ½º½º·Î ³»¿ëÀ» Ãß°¡Çϵµ·Ï Çϱâ À§ÇØ ¸î °¡Áö ¸Þ¼Òµå¸¦ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â Ŭ¶óÀÌ¾ðÆ®°¡ À̹ÌÁö¿¡ ¼±À» Ãß°¡Çϱâ À§Çؼ ScribbleService.asmx À¥ ¼ºñ½º¸¦ È£ÃâÇϸ®¶ó ±â´ëÇÕ´Ï´Ù.
1. À¥ »çÀÌÆ® ¸Þ´º¸¦ ´©¸£°í »õ Ç׸ñ Ãß°¡ ȤÀºCtrl + Shift + A¸¦ ´©¸¨´Ï´Ù.
2. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡¼ À¥ ¼ºñ½º¸¦ ¼±ÅÃÇϰí, ScribbleService.asmx À̶ó´Â À̸§À» ÀÔ·ÂÇÑ ÈÄ È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù. ´Ù¸¥ ÆÄÀÏ¿¡ ÄÚµå ÀÔ·ÂÀº üũÇÏÁö ¸¶½Ê½Ã¿À.
3. ´ÙÀ½ ÁÙ¿¡ ³ª¿À´Â ¹Ù¿Í °°ÀÌ System.Drawing ³×ÀÓ½ºÆäÀ̽º¸¦ ÀÓÆ÷Æ®ÇÕ´Ï´Ù.
4. ´ÙÀ½¿£, Á¡À» À§ÇÑ °£´ÜÇÑ Å¬·¡½º¸¦ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â XML serializableÀÌ ¾Æ´Ï±â ¶§¹®¿¡ System.Drawing.Point Ŭ·¡½º¸¦ »ç¿ëÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ÀÌ ÈÄÀÇ Æ©Å丮¾ó¿¡¼´Â Ä¿½ºÅÒ Å¬·¡½º¸¦ ´ë½ÅÇÏ¿© System.Drawing.Point ¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æ º¼ °ÍÀÔ´Ï´Ù. ScribbleService Ŭ·¡½º ¼±¾ð Àü¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
public class Point
{
public int X;
public int Y;
};
|
5. ¸¶Áö¸·À¸·Î, ¿ì¸®´Â ÁÖ¾îÁø Á¡µéÀÇ ÁýÇÕÀÎ ½ºÄÉÄ¡¸¦ ±×¸®±â À§Çؼ ¸Þ¼Òµå¸¦ Ãß°¡ÇØ¾ß ÇÕ´Ï´Ù. ¿ì¸®´Â À¥ ¼ºñ½º¿¡ Draw ¶ó´Â À¥ ¸Þ¼Òµå¸¦ Ãß°¡ÇÒ °ÍÀÔ´Ï´Ù.
[WebMethod(EnableSession = true)]
public void Draw(Point[] points)
{
Image scribbleImage = (Image)Session["Image"];
lock(scribbleImage)
{
using (Graphics g = Graphics.FromImage(scribbleImage))
using(Pen p = new Pen(Color.Black, 2))
{
if (points.Length > 1)
{
int startX = points[0].X;
int startY = points[0].Y;
for (long i = 1; i < points.Length; i++)
{
g.DrawLine(p, startX, startY,
points[i].X, points[i].Y);
startX = points[i].X;
startY = points[i].Y;
}
}
}
}
}
|
o WebMethod(EnableSession = true) ¼Ó¼ºÀº ¼¼¼Ç º¯¼ö°¡ À¥ ¼ºñ½º¿¡¼ Á¢±Ù °¡´ÉÇϵµ·Ï ÇÕ´Ï´Ù.
o À̹ÌÁö´Â Àá°å±â ¶§¹®¿¡ Çö½ÃÁ¡ Á¢±Ù ½Ã ¾ÈÀüÇÕ´Ï´Ù.
o points ¹è¿ ¾È¿¡ Á¦°øµÈ Á¡µéÀ» Á¶ÀÎÇÏ´Â °Íó·³ µå·ÎÀ®Àº ²Ï °£´ÜÇÕ´Ï´Ù.
Scribble.js
¿ì¸®´Â ¼¹ö Ãø À̹ÌÁö Çڵ鷯¿Í À̹ÌÁö¸¦ ¾÷±×·¹ÀÌµå ½ÃŰ´Â ¼¹ö Ãø À¥ ¼ºñ½º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌÁ¦ ¿ì¸®´Â ¸¶¿ì½º À̺¥Æ®·Î ÀÎÇÑ Á¡µéÀ» ¼¹öÀÇ À¥ ¼ºñ½º¿¡ º¸³»ÁÖ´Â scribble ¾ÖÇø®ÄÉÀ̼ÇÀÇ Å¬¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®°¡ ÇÊ¿äÇÕ´Ï´Ù.
1. ¼Ö·ç¼Ç Ž»ö±â¿¡¼ ScriptLibrary Æú´õ¸¦ ¼±ÅÃÇÕ´Ï´Ù.
2. À¥ »çÀÌÆ® ¸Þ´º¸¦ ´©¸£°í »õ Ç׸ñ Ãß°¡ ȤÀºCtrl + Shift + A¸¦ ´©¸¨´Ï´Ù.
3. »õ Ç׸ñ Ãß°¡ ´ÙÀ̾ó ·Î±× ¹Ú½º¿¡¼ JScript ÆÄÀÏ,À» ¼±ÅÃÇϰí Scribble.js ¶ó°í À̸§À» ÁöÁ¤ÇÑ ÈÄ È®ÀÎ ¹öưÀ» ´©¸¨´Ï´Ù. Scribble.js ÆÄÀÏÀº ScriptLibrary Æú´õ ¾È¿¡ À§Ä¡ÇÒ °ÍÀÔ´Ï´Ù.
4. ´ÙÀ½¿£ ¿ì¸®´Â ¸î °¡Áö ±Û·Î¹ú º¯¼ö¸¦ ¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. ScribbleÀÇ Ã¹ ¹øÂ° ¹öÀü¿¡¼´Â ±Û·Î¹ú º¯¼ö¸¦ »ç¿ëÇÏÁö¸¸ Â÷±â ¹öÀü¿¡¼´Â ÀÚ¹Ù½ºÅ©¸³Æ® °´Ã¼¸¦ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.
//The HTML image element that is to be drawn
var image;
//The source of the image
var originalSrc;
//The number of iteration
var iter = 0;
//The array of points
var points = null;
|
º¯¼ö ¼±¾ð À§ÀÇ ÁÖ¼®Àº °¢ º¯¼öÀÇ ¸ñÀûÀ» ¹¦»çÇÕ´Ï´Ù. iter º¯¼ö´Â ±×¸®±â ¿äû ÀÌÈÄ¿¡ ¼¹ö¿¡ º¸³»Áö´Â À̹ÌÁö ¼Ò½º¸¦ ¼öÁ¤Çϴµ¥ ¾²ÀÔ´Ï´Ù. image.src = image.src·Î ¼³Á¤ÇÏ´Â °æ¿ì¿¡ ÀÎÅÍ³Ý ÀͽºÇ÷η¯´Â À̹ÌÁö¸¦ ´Ù½Ã ºÒ·¯µéÀÌÁö¸¸, ÀÌ µ¿ÀÏÇÑ Äڵ尡 ÆÄÀÌ¾îÆø½º¿¡¼´Â µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ¹®Á¦¸¦ ¾È°í µ¿ÀÛÇϱâ À§Çؼ ¸Å ½Ã°£ Áõ°¡µÈ iter º¯¼ö¸¦ Áö¼Ó½Ã۱â À§ÇØ Draw ¿äûÀ» À¥ ¼ºñ½º¿¡ º¸³À´Ï´Ù. ºê¶ó¿ìÀú´Â ij½ÃµÈ À̹ÌÁö¸¦ ÀÌ¿ëÇϱ⠺¸´Ù´Â »õ µ¥ÀÌÅ͸¦ ¹Þµµ·Ï ¼¹ö¿¡ ¿äûÇÒ Çʿ䰡 ÀÖ´Ù°í »ý°¢Çϱ⠶§¹®¿¡ originalSrc º¯¼ö¿¡ iteration number¸¦ Ãß°¡ÇÕ´Ï´Ù.
5. mousedown À̺¥Æ®¿¡ ¹ÝÀÀÇÏ¿© ½ºÆ®·ÎÅ©¸¦ ½ÃÀÛÇϱâ À§Çؼ function startStroke ¸¦ Á¤ÀÇÇÕ´Ï´Ù.
function startStroke()
{
points = new Array();
window.event.returnValue = false;
}
|
»õ·Î¿î ½ºÆ®·ÎÅ©°¡ ½ÃÀ۵Ǹé ù ¹øÂ° ÁÙ¿¡ Áö½ÃµÈ »õ·Î¿î Á¡µéÀÇ ÁýÇÕÀ» »ý¼ºÇÕ´Ï´Ù. µÎ ¹øÂ° ÁÙÀº À̺¥Æ®ÀÇ ±âº» ÇàÀ§¸¦ Ãë¼Ò½Ãŵ´Ï´Ù. ÀÌ°Ç À̹ÌÁö¿¡ ´ëÇÑ mousedown À̺¥Æ®ÀÇ ±âº» ÇàÀ§Ã³·³ ²À ÇÊ¿äÇÕ´Ï´Ù. µå·¡±× µ¿ÀÛÀ» ½ÃÀÛÇϸé ÀÛ¾÷ÀÌ ½ÃÀ۵ʿ¡ µû¶ó Â÷ÈÄ ÀϾ À̺¥Æ®¸¦ À̲ø¾î°¡±â À§ÇØ À̹ÌÁö´Â µå·¡±× µ¿ÀÛÀ» ½ÃÀÛÇÕ´Ï´Ù.
6. mouseup À̺¥Æ®³ª mouseout À̺¥Æ®°¡ ÀϾ¸é ½ºÆ®·ÎÅ©´Â ³¡ÀÌ ³³´Ï´Ù. ¿ì¸®´Â ½ÇÁ¦·Î À¥ ¼ºñ½º¸¦ È£ÃâÇϵµ·Ï ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ°Ç function endStroke¿¡¼ ÀÌ·ç¾îÁý´Ï´Ù.
function endStroke()
{
if (!points || points.length < 2)
return true;
//Send the points to the webservice
ScribbleService.Draw(points, onWebMethodComplete,
onWebMethodTimeout, onWebMethodError);
points = null;
window.event.returnValue = false;
}
|
ÀÌ ±â´É¿¡¼ Èï¹Ì¸¦ ²ô´Â À¯ÀÏÇÑ ÄÚµå ¶óÀÎÀº ScribbleService.Draw(points, onWebMethodComplete, onWebMethodTimeout, onWebMethodError); ÀÔ´Ï´Ù. ¿©±â¿¡¼´Â ºñµ¿±âÀûÀ¸·Î ScribbleService.asmx ¿¡ ÀÖ´Â À¥ ¼ºñ½º ¸Þ¼Òµå Draw ¸¦ È£ÃâÇÕ´Ï´Ù. ÀÌ ±â´ÉÀº Atlas ÇÁ·¹ÀÓ¿öÅ©¿¡ À§ÇØ ¿ì¸®°¡ Áï°¢ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
7. onWebMethodError ´Â À¥ ¼ºñ½º ¸Þ¼Òµå¿¡¼ ¿¡·¯ ¹ß»ý½Ã Atlas ÇÁ·¹ÀÓ¿öÅ©¿¡ ÀÇÇØ È£ÃâµË´Ï´Ù. onWebMethodTimeout ´Â À¥ ¸Þ¼Òµå È£ÃâÀÌ Atlas ÇÁ·½ÀÓ¿öÅ©¿¡ Á¤ÀÇµÈ Å¸ÀӾƿô ¼³Á¤À» ÃʰúÇÒ ¶§ È£ÃâµË´Ï´Ù. ÀÌ ¹öÀü¿¡¼ ¿ì¸®´Â »ç¿ëÀÚ¿¡°Ô ¿¡·¯ ÅØ½ºÆ®°¡ ´ã±ä ¸Þ½ÃÁö ¹Ú½º¸¦ º¸¿©ÁÙ °Ì´Ï´Ù.
function onWebMethodError(fault)
{
alert("Error occured:\n" + fault.get_message());
}
function onWebMethodTimeout()
{
alert("Timeout occured");
}
|
8. function onWebMethodComplete ´Â À¥ ¸Þ¼Òµå È£ÃâÀÌ ¼º°øµÇ¾úÀ» ¶§ È£ÃâµË´Ï´Ù. À̶§ À̹ÌÁö´Â ¸®·ÎµåµÇ¾î¾ß ÇÕ´Ï´Ù.
function onWebMethodComplete(result, response, context)
{
//We need to refresh the image
var shimImage = new Image(200, 200);
shimImage.src = originalSrc + "?" + iter++;
shimImage.onload = function()
{
image.src = shimImage.src;
}
}
|
¿ì¸®´Â Image °´Ã¼object shimImage ¸¦ »ý¼ºÇϰí, ¿ì¸®°¡ µå·ÎÀ®ÇÒ ¶§ ÀÌ ¼Ò½º¿¡¼ À̹ÌÁöÀÇ ¿À¸®Áö³Î ¼Ò½º·Î ¼³Á¤ÇÕ´Ï´Ù. À̹ÌÁö °´Ã¼°¡ ·Îµå µÉ ¶§ ÆäÀÌÁöÀÇ ½ÇÁ¦ HTML À̹ÌÁö ¿ä¼ÒÀÇ ¼Ò½º ÁýÇÕ¿¡¼ Àӽà À̹ÌÁö °³Ã¼ÀÇ ¼Ò½º·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ´Â À̹ÌÁö¸¦ ´ëüÇÒ ¶§ flicker¸¦ ÇÇÇÕ´Ï´Ù.
9. ¿ì¸®´Â mousemove À̺¥Æ®°¡ ÀϾ µ¿¾È points ¹è¿À» ä¿ö¾ß ÇÕ´Ï´Ù. ÀÌ°Ç function addPoints¿¡¼ ´ã´çÇÕ´Ï´Ù.
function addPoints()
{
if (points)
{
var point = { X : window.event.offsetX,
Y : window.event.offsetY};
points.push(point);
if (points.length == 3)
{
endStroke();
points = new Array();
points.push(point);
}
window.event.returnValue = false;
}
}
|
o »õ·Î¿î point °´Ã¼´Â À̺¥Æ® °´Ã¼ÀÇ offsetX °ú offsetY ¼Ó¼ºÀ» »ý¼ºÇϰí, ±×°ÍÀ» points ¹è¿¿¡ Ãß°¡ÇÕ´Ï´Ù. offsetX ¿Í offsetY ¼Ó¼ºÀº À̺¥Æ®¸¦ ÀÏÀ¸Å² HTML ¿ä¼Ò¿¡ °üÇØ ¿¬°üµÈ ¸¶¿ì½º À§Ä¡¸¦ ÁÝ´Ï´Ù.
o ¸¸¾à ¹è¿ÀÇ ±æÀ̰¡ 3¿¡ À̸¥´Ù¸é, ¿ì¸®´Â Áï°¢ÀûÀ¸·Î ±×¸®±â µ¿ÀÛÀ» ÇÒ °ÍÀ» ¼¹ö¿¡ ¿äûÇϰí, points ¹è¿À» Àç¼³Á¤Çϵµ·Ï ÇÕ´Ï´Ù. ÀÌ µ¿ÀÛÀº »ç¿ëÀÚ°¡ ¸¶¿ì½º ¹öưÀ» ³õ±â Àü¿¡ µå·ÎÀ®À» º¼ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
10. ¸¶Áö¸·À¸·Î, À̺¥Æ®µéÀ» hookÇØ¾ß ÇÕ´Ï´Ù. ÀÌ°Ç function pageLoad¿¡¼ ´ã´çÇÕ´Ï´Ù.
function pageLoad()
{
var surface = document.getElementById("drawingSurface");
image = surface.getElementsByTagName("IMG")[0];
originalSrc = image.src;
surface.attachEvent("onmousedown", startStroke);
surface.attachEvent("onmouseup", endStroke);
surface.attachEvent("onmouseout", endStroke);
surface.attachEvent("onmousemove", addPoints);
}
|
o function pageLoad´Â Atlas framework°¡ ·ÎµùÀ» ¸¶ÃÆÀ» ¶§ È£ÃâµÇ´Â Ưº°ÇÑ ±â´ÉÀÔ´Ï´Ù. ¿ì¸®´Â ÀÌ°É regular window ³ª body load events¸¦ ´ë½ÅÇÏ¿© »ç¿ëÇÕ´Ï´Ù. ±×·¡¼ ¿ì¸®´Â Atlas°¡ ·ÎµùÀ» ¸¶ÃÆ´Ù´Â °ÍÀ» È®½ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.
o ½ÇÁ¦ À̹ÌÁö ¿ä¼Ò´Â div ÅÂ±× ¿Í drawingSurfaceÀÇ id¾È¿¡ À§Ä¡ÇÑ °÷¿¡¼ ½ºÄÉÄ¡µÈ °ÍÀ» °®½À´Ï´Ù. ¿ä¼ÒÀÇ Å©±â´Â À̹ÌÁöÀÇ Å©±â¿Í µ¿ÀÏÇÕ´Ï´Ù. ±×·¡¼ ¿ì¸®´Â ¾ÈÀüÇÏ°Ô drawingSurface div¿¡ À̺¥Æ®¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Default.aspx
¾ÖÇø®ÄÉÀ̼ÇÀÇ °¢ ÄÄÆ÷³ÍÆ®´Â Default.aspx ÆäÀÌÁö¿¡¼ ¾î¼Àºí(assembled)µÇ¾î¾ß ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ÀÌ ÆäÀÌÁöÀÇ ÄÚµåÀÔ´Ï´Ù.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Atlas Scribble Sample</title>
</head>
<body>
<form id="form1" runat="server">
<Atlas:ScriptManager ID="AtlasScriptManager" runat="server"
EnableScriptComponents="False" >
<Services>
<Atlas:ServiceReference Path="ScribbleService.asmx" />
</Services>
<Scripts>
<Atlas:ScriptReference Path="ScriptLibrary/Scribble.js" />
</Scripts>
</Atlas:ScriptManager>
<div id="drawingSurface"
style="border:solid 1px black;height:200px;width:200px">
<img alt="Scribble" src="ScribbleImage.ashx"
style="height:200px;width:200px" galleryimg="false" />
</div>
</form>
</body>
</html>
|
ÀÌ ÆäÀÌÁö¿¡¼ °¡Àå Áß¿äÇÏ°Ô º¸¾Æ¾ß ÇÒ °ÍÀº atlas:ScriptManager ¼¹ö ÄÜÆ®·ÑÀÔ´Ï´Ù. ScriptManager ¼¹ö ÄÜÆ®·ÑÀº Atlas¸¦ À§ÇÑ Å¬¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ® ºí·Ï°ú À¥ ¼ºñ½º ÇÁ·Ï½Ã ½ºÅ©¸³Æ®¸¦ »ý¼ºÇØ¾ß ÇÒ Ã¥ÀÓÀ» °¡Áö°í ÀÖ½À´Ï´Ù. Default.aspx ÆäÀÌÁö¿¡ ÀÖ´Â ScriptManager ÄÁÆ®·ÑÀ» ÀÌ¿ëÇØ¼ ½ÇÇèÇØº¼ ¼ö ÀÖ½À´Ï´Ù.
1. EnableScriptComponents ¼Ó¼ºÀº false·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ·Î ÀÎÇØ AtlasRuntime.js Atlas.js´ë½Å AtlasRuntime.js ¸¦ ÂüÁ¶ÇÏ¿© Ŭ¶óÀÌ¾ðÆ® Ãø ½ºÅ©¸³Æ® ºí·ÏÀ» »ý¼ºÇÕ´Ï´Ù. ¿ì¸®´Â À̹ø scribble ¹öÀü¿¡¼ ´Ù¸¥ ¾î¶°ÇÑ Atlas ÄÄÆ÷³ÍÆ®¿Í ÄÁÆ®·ÑÀ» »ç¿ëÇÏÁö ¾Ê´Â °Íó·³ Atlas ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¶óÀÌÆ® ¹öÀü¸¦ ¼±È£ÇÕ´Ï´Ù.
2. ScribbleService.asmx À¥ ¼ºñ½º¿¡ ¼ºñ½º ·¹ÆÛ·±½º¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ°Ç À¥ ¼ºñ½º ÇÁ·Ï½Ã¸¦ À§ÇÑ Å¬¶óÀ̾ðÆ®Ãø ½ºÅ©¸³Æ®¿¡ URL ·¹ÆÛ·±½º¸¦ »ý¼ºÇÒ °Ì´Ï´Ù.
3. Scribble.js ¿Í °°Àº ¶Ç ´Ù¸¥ ½ºÅ©¸³Æ® ·¹ÆÛ·±½º¸¦ Ãß°¡ÇÕ´Ï´Ù.
ÀÌ°Ç ¸ðµç Á¶°¢µéÀ» Çϳª·Î ¹¾îÁֹǷÎ, ÀÌÁ¦ ´ç½ÅÀº ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ°í, ÇÁ·ÎÁ§Æ®¸¦ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. Àú´Â Atlas ½ºÅ©¸³Æ® ¸Å´ÏÀú¿¡ ÀÇÇØ »ý¼ºµÈ ½ÇÁ¦ Ŭ¶óÀÌ¾ðÆ® HTMLÀ» º¼ °ÍÀ» ±Ç°íÇÕ´Ï´Ù.
Atlas ¸¶¹ý
¿©±â¿¡¼´Â ÇÁ·¹ÀÓ¿öÅ©°¡ ¿ì¸®¸¦ À§ÇØ ¾î¶² ÀÏÀ» ÇÏ´ÂÁö ¾Ë·ÁÁÝ´Ï´Ù.
1. ¿©±â¿¡¼ ¿ì¸®´Â »óÈ£ ºê¶ó¿ìÀú°¡ µ¿ÀÛÇϱâ À§Çؼ ¾î¶² Ưº°ÇÑ È¿°ú¸¦ »ç¿ëÇÏÁö ¾Ê°í À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ¿´½À´Ï´Ù. À¥ ¼ºñ½º È£Ãâ°ú Ŭ¶óÀ̾ðÆ®Ãø À̺¥Æ® Çڵ鸵Àº ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿Í ÆÄÀÌ¾îÆø½º ¸ðµÎ¿¡¼ Áï°¢ÀûÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù. Atlas ÇÁ·¹ÀÓ¿öÅ©´Â ÀÎÅÍ³Ý ÀͽºÇ÷η¯ °´Ã¼¿Í °°ÀÌ º¸ÀÌ°Ô Çϱâ À§ÇØ ÆÄÀÌ¾îÆø½º °´Ã¼¿¡ ¿ä±¸µÈ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·ÎÅäŸÀÔÀ» Ãß°¡Çß½À´Ï´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯¿¡ Ư¼ºÈµÈ ±â´ÉµéÀÎ attachEvent ¿Í event.offsetX , event.offsetY ´Â ÆÄÀÌ¾îÆø½º¿¡¼ µ¿À۵ǵµ·Ï Çß½À´Ï´Ù. ´ç½ÅÀº À̰ÍÀÌ ¾î¶»°Ô ÀÌ·ç¾îÁö´ÂÁö AtlasCompat.js ÆÄÀÏ¿¡¼ º¼ ¼ö ÀÖ½À´Ï´Ù.
2. Scribble À¥ ¼ºñ½º ¸Þ¼Òµå¸¦ À§ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Ï½Ã¸¦ ÀÚµ¿ÀûÀ¸·Î »ý¼ºÇÕ´Ï´Ù. ScribbleService.asmx ÆÄÀÏÀ» À§ÇÑ ÀÚ¹Ù½ºÅ©¸³Æ® ÇÁ·Ï½Ã ÆÄÀÏÀº URL ScribbleService.asmx/js¸¦ °¡Áý´Ï´Ù. ÀÌ°Ç web.config.¿¡ Ãß°¡µÈ the Atlas HTTP ¸Þ¼Òµå¿¡ ÀÇÇØ »ý¼ºµË´Ï´Ù.
¿ì¸®´Â ¾îµð¿¡ Àִ°¡
¿ì¸®´Â À¥ ¼ºñ½º¸¦ È£ÃâÇÏ´Â ¹æ¹ý°ú Atlas¸¦ ÀÌ¿ëÇÏ¿© ½±°Ô ºê¶ó¿ìÀú°£¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ´ÙÀ½ Æ©Å丮¾ó¿¡¼ ¿ì¸®´Â Atlas Ŭ¶óÀÌ¾ðÆ® Å¬¶óÀ̾ðÆ®Ãø ÄÁÆ®·Ñ°ú ¼±¾ðÀûÀÎ ÇÁ·Î±×·¡¹Ö(»ç¿ëÀÚ Çǵå¹é¿¡ ÀÇÁ¸ÇÏ´Â!)À» ¾Ë¾Æº¼ °ÍÀÔ´Ï´Ù. ¸¸¾à ´ç½ÅÀÌ ÀÌ Æ©Å丮¾ó¿¡ ¸¸Á·Çß´Ù¸é ÄÚ¸àÆ®¸¦ ³²°ÜÁÖ¼¼¿ä. ¸¸¾à ¸¸Á·½º·´Áö ¸øÇß´Ù¸é ¾î¶»°Ô °³¼±Çϸé ÁÁÀ»Áö ÄÚ¸àÆ®¸¦ ³²°ÜÁÖ¼¼¿ä.
´Ù¿î·Îµå¿Í ¼Ò½º ½ÇÇà
Atlas¸¦ Àç¹èÆ÷ ÇÒ ¼ö ÀÖµµ·Ï µÇ¾î ÀÖÁö ¾Ê±â ¶§¹®¿¡, Àú´Â Atlas ÆÄÀÏÀ» ¼Ò½º ´Ù¿î·Îµå¿¡ Æ÷ÇÔÇÏÁö ¾Ê¾Ò½À´Ï´Ù. ¼Ò½º¸¦ µ¿ÀÛ½Ã۱â À§Çؼ´Â ¿©±â¿¡ ÀûÈù ¼ø¼¿¡ µû¶ó ´Ù¿î·Îµå ¹Þ¾Æ¾ß ÇÕ´Ï´Ù.
1. ´ç½ÅÀº Atlas À¥ »çÀÌÆ®¿¡¼ Atlas¸¦ ´Ù¿î·Îµå ¹Þ¾Æ¾ß ÇÕ´Ï´Ù.
2. Atlas blank project template¸¦ ´Ù¿î·Îµå ¹ÞÀº ÈÄ¿¡ »õ·Î¿î À¥ »çÀÌÆ®¸¦ ´ÙÀ½ ¼ø¼¿¡ µû¶ó »ý¼ºÇÕ´Ï´Ù. ÆÄÀÏ ¸Þ´º¿¡¼ »õ·Î ¸¸µé±â¸¦ À¥ »çÀÌÆ®¸¦ ¼±ÅÃÇÕ´Ï´Ù.
3. »õ·Ó°Ô »ý¼ºµÈ ÇÁ·ÎÁ§Æ® µð·ºÅ丮¿¡ ¼Ò½ºÆÄÀÏÀÇ ¾ÐÃàÀ» Ç®¾î ÀÌÀü¿¡ Á¸ÀçÇß´ø ÆÄÀϵéÀ» µ¤¾î ¾¹´Ï´Ù.
4. À¥ »çÀÌÆ® ¸Þ´º¿¡¼ ±âÁ¸ Ç׸ñ Ãß°¡¸¦ ¼±ÅÃÇϰí, À¥ »çÀÌÆ®ÀÇ ÃÖ»óÀ§ µð·ºÅ丮¿¡ ScribbleService.asmx ¿Í ScribbleImage.ashx¸¦, ScriptLibrary Æú´õ¿¡¼´Â Scribble.js¸¦ Ãß°¡ÇÕ´Ï´Ù.
5. ºôµåÇϰí À¥ »çÀÌÆ®¸¦ ½ÇÇà½Ãŵ´Ï´Ù.
°Á ¸ñ·ÏÀ¸·Î..
|