{"id":164439,"date":"2013-03-17T11:03:03","date_gmt":"2013-03-17T07:03:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=164439"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=164439","title":{"rendered":"<span class=\"post_title\">\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 C# \u043f\u043e\u0434 .NET \u0438 JavaScript<\/span>"},"content":{"rendered":"<div class=\"content html_format\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u0432\u0430\u0441, \u0445\u0430\u0431\u0440\u0430\u0432\u0447\u0430\u043d\u0435. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 C# \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0435 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a .NET \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 (JavaScript). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 <a href=\"http:\/\/gfranq.com\/\">gfranq.com<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u044f \u043d\u0435 \u0443\u043c\u0435\u044e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0442\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0442\u0435\u043c\u0435:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/d07\/ead\/520\/d07ead5209a54ce4fbb083f1a0c746a1.png\"\/><\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<p>  <a href=\"#Goal\">\u0426\u0435\u043b\u044c<\/a>  <\/p>\n<ul>\n<li><a href=\"#Filters\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432<\/a><\/li>\n<li><a href=\"#Collages\">\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439<\/a><\/li>\n<\/ul>\n<p><a href=\"#Means\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a>  <\/p>\n<ul>\n<li><a href=\"#Platform\">\u0412\u044b\u0431\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438<\/a><\/li>\n<li><a href=\"#Translation\">\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f C# \u0432 JavaScript<\/a><\/li>\n<li><a href=\"#Structure\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/a><br \/> \n<ul>\n<li><a href=\"#Alias\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 alias<\/a><\/li>\n<li><a href=\"#Links\">\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#DotnetNotes\">\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043e .NET \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a><br \/> \n<ul>\n<li><a href=\"#DisposeUsing\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Dispose<\/a><\/li>\n<li><a href=\"#LockUsing\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 lock<\/a><\/li>\n<li><a href=\"#MasksInMemory\">\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#JavascriptNotes\">\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043e JavaScript \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a><br \/> \n<ul>\n<li><a href=\"#Minification\">\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/a><br \/> \n<ul>\n<li><a href=\"#ManualMinify\">\u0412\u0440\u0443\u0447\u043d\u0443\u044e<\/a><\/li>\n<li><a href=\"#AutoMinify\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#DebugRelease\">Debug &#038; Release \u0440\u0435\u0436\u0438\u043c\u044b<\/a><\/li>\n<li><a href=\"#crossOrigin\">\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e crossOrigin<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#Optimizations\">\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/a><br \/> \n<ul>\n<li><a href=\"#Precalculs\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 (\u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/a><\/li>\n<li><a href=\"#Pixels\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a href=\"#CodeSamples\">\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/a>  <\/p>\n<ul>\n<li><a href=\"#General\">\u041e\u0431\u0449\u0438\u0435<\/a><br \/> \n<ul>\n<li><a href=\"#IsNumericSample\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0447\u0438\u0441\u043b\u043e\u043c<\/a><\/li>\n<li><a href=\"#IntegerDivSample\">\u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"#ImageRotateFlipSample\">\u041f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 canvas \u0438 Bitmap \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e<\/a><\/li>\n<li><a href=\"#AsyncSyncImageLoadSample\">\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#JavascriptOnly\">\u0422\u043e\u043b\u044c\u043a\u043e Script#<\/a><br \/> \n<ul>\n<li><a href=\"#BrowserDetermSample\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/a><\/li>\n<li><a href=\"#DashDotLineSample\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043f\u0443\u043d\u043a\u0442\u0438\u0440\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438<\/a><\/li>\n<li><a href=\"#RotateAnimationSample\">\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a href=\"#Conclusion\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<p>  <a name=\"Goal\"><\/a><\/p>\n<h3>\u0426\u0435\u043b\u044c<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435, \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0438 \u043a\u043e\u043b\u043b\u0430\u0436\u0438.<\/p>\n<p>  <a name=\"Filters\"><\/a><\/p>\n<h4>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432<\/h4>\n<p>  <b>\u0424\u0438\u043b\u044c\u0442\u0440<\/b> \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 (action), \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 Photoshop, \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e \u0438\u0437: <\/p>\n<ul>\n<li>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u043d\u043e\u0441\u0442\u0438<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/li>\n<li>\u041a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043a\u0440\u0438\u0432\u044b\u0445<\/li>\n<li>\u041d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438<\/li>\n<li>\u041d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u043c\u043e\u043a<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0443\u0436\u0435\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b, \u0442\u0438\u043f\u0430 JSON \u0438 XML, \u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c (.NET, JavaScript, WinPhone \u0438 \u0434\u0440.).<\/li>\n<li>\u0424\u043e\u0440\u043c\u0430\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440 \u0434\u043b\u044f \u043d\u0435\u0433\u043e.<\/li>\n<li>XML \u0438 JSON \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0435\u0441\u044f\u0442 (\u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f).<\/li>\n<\/ul>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430 <b>XPro Film<\/b>:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/676\/c7f\/02d\/676c7f02d48365b075a03854256eac55.jpg\"\/><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u043c, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0435\u0449\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0435\u0437\u043a\u0443 \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u0430, \u044f \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 jQuery \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u043e\u0431\u0440\u0435\u0437\u043a\u0438, \u043d\u043e, \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c\u0438, \u0430, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0435 \u0432\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <a name=\"Collages\"><\/a><\/p>\n<h4>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439<\/h4>\n<p>  <b>\u041a\u043e\u043b\u043b\u0430\u0436<\/b> \u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0438\u043d\u0438\u0430\u0442\u044e\u0440\u043d\u044b\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0432 \u043e\u0434\u043d\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u043a\u0438 \u0438\u043b\u0438 \u0431\u0435\u0437. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0444\u043e\u0442\u043e\u043a \u043d\u0430 \u043a\u043e\u043b\u043b\u0430\u0436 \u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431.<\/p>\n<p>  \u041a\u043e\u043b\u043b\u0430\u0436 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/cs0107.gfranq.net\/UploadFiles\/20121224\/th135\/u135170\/c24949901599230355915.jpg\" alt=\"image\"\/><\/p>\n<p>  \u0414\u043b\u044f \u043a\u043e\u043b\u043b\u0430\u0436\u0430 \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0432 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u043e\u0442 0 \u0434\u043e 1, \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0442\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0444\u043e\u0442\u043a\u0430\u043c.<\/p>\n<p>  <a name=\"Means\"><\/a><\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>  <a name=\"Platform\"><\/a><\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438<\/h4>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 RIA \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438:  <\/p>\n<ul>\n<li>Adobe Flash<\/li>\n<li>Microsoft Silverlight<\/li>\n<li>HTML 5 + JavaScript<\/li>\n<li>Native Client<\/li>\n<\/ul>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u044e\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0442\u043e\u043b\u044c\u043a\u043e Flash \u0438 HTML 5, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0435 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b. \u0410 Silverlight \u0435\u0449\u0435 \u0438 \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u043e\u0442\u043c\u0438\u0440\u0430\u0435\u0442. \u0425\u043e\u0442\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f <s>\u0441\u043e\u043b\u0438<\/s> NaCl \u043c\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043d\u043e, \u0443\u0432\u044b, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Chrome, \u0438 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043c\u043e\u0434\u043d\u0430\u044f \u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f HTML 5, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0435\u0449\u0435 \u0438 \u043d\u0430 iOS, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Flash. \u0422\u0430\u043a\u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c C# \u0432 JavaScript, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0432 Visual Studio. \u041e\u0431 \u044d\u0442\u043e\u043c, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>  <a name=\"Translation\"><\/a><\/p>\n<h4>\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f C# \u0432 JavaScript<\/h4>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0431\u044b\u043b\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: HTML 5 + JavaScript. \u041d\u043e \u0432\u043e\u0437\u043d\u0438\u043a \u0432\u043e\u043f\u0440\u043e\u0441, \u0430 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 C# \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0433 \u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0434 .NET \u0438 \u043f\u043e\u0434 JavaScript?<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438:  <\/p>\n<ul>\n<li>JSIL<\/li>\n<li>SharpKit<\/li>\n<li>Script#<\/li>\n<li>\u0418 \u0434\u0440\u0443\u0433\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/github.com\/jashkenas\/coffee-script\/wiki\/List-of-languages-that-compile-to-JS\">\u0432 \u044d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043d\u0430 github<\/a>.<\/li>\n<\/ul>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>Script#<\/b> \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e JSIL \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u0430\u043c\u0438 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 \u0447\u0438\u0441\u0442\u044b\u0439 \u043a\u043e\u0434 (\u0445\u043e\u0442\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 C#), \u0430 SharpKit \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u043c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 <a href=\"http:\/\/stackoverflow.com\/q\/11547471\/1046374\">\u0432\u043e\u043f\u0440\u043e\u0441\u0435 JSIL vs Script# vs SharpKit \u043d\u0430 stackoverflow<\/a>.<\/p>\n<p>  \u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f, \u0445\u043e\u0447\u0443 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ScriptSharp \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c JavaScript \u0432\u0440\u0443\u0447\u043d\u0443\u044e:<\/p>\n<ul>\n<li>+\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u0434 .NET \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (WP, Mono).<\/li>\n<li>+\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 C# \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u041e\u041e\u041f.<\/li>\n<li>+\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 IDE \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (\u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433).<\/li>\n<li>+\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li>-\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e JavaScript (\u0438\u0437-\u0437\u0430 mscorlib).<\/li>\n<li>-\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 ISO-2 (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u043e\u0432, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u0433\u0435\u043d\u0435\u0440\u0438\u043a\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e).<\/li>\n<\/ul>\n<p>  <a name=\"Structure\"><\/a><\/p>\n<h4>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<\/h4>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 .NET \u0438 JavaScript \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0445\u0435\u043c\u044b:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/8ba\/bce\/32c\/8babce32c532d3b3954cdabebabb0e06.png\"\/><\/p>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e .NET \u0438 HTML5 \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0447\u0435\u0440\u0442\u044b. \u042d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 .NET \u0435\u0441\u0442\u044c <b>Bitmap<\/b>, \u0430 \u0432 JavaScript \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u0435\u043c\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <b>canvas<\/b>. \u0422\u0430\u043a\u0436\u0435 \u0438 \u0441 <b>Graphics<\/b> \u0438 <b>Context<\/b>, \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/89c\/427\/74c\/89c42774cf90bdc873a0c34619cf7207.png\"\/><\/p>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u043e \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u043c\u0438. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 WP, \u0430 \u043f\u043e\u0442\u043e\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, Android \u0438 iOS.<\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439:<\/p>\n<ul>\n<li><b>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 API <\/b>(DrawImage, Arc, MoveTo, LineTo). \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u2014 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445.<\/li>\n<li><b>\u041f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0435.<\/b> \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u044e\u0431\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0438 \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u2014 \u043d\u0438\u0437\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0442\u0435\u043c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 (\u043e \u0447\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e).<\/li>\n<\/ul>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 <b>Graphics<\/b> \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439, \u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u043e\u043d\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043a\u0430\u043a Bitmap \u0438 Canvas \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/aa664765(v=vs.71).aspx\">\u0430\u043b\u0438\u0430\u0441\u044b<\/a>. \u0422\u0430\u043a\u0436\u0435 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0439 WP \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0438 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B5%D1%80_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)\">\u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0430\u0434\u0430\u043f\u0442\u0435\u0440<\/a>.<\/p>\n<p>  <a name=\"Alias\"><\/a><\/p>\n<h5>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 alias<\/h5>\n<p>  <\/p>\n<pre><code class=\"cs\">#if SCRIPTSHARP using System.Html; using System.Html.Media.Graphics; using System.Runtime.CompilerServices; using Bitmap = System.Html.CanvasElement; using Graphics = System.Html.Media.Graphics.CanvasContext2D; using ImageData = System.Html.Media.Graphics.ImageData; using Image = System.Html.ImageElement; #elif DOTNET using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using Bitmap = System.Drawing.Bitmap; using Graphics = System.Drawing.Graphics; using ImageData = System.Drawing.Imaging.BitmapData; using Image = System.Drawing.Bitmap; #endif <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0432 C# \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043b\u0438\u0430\u0441\u044b \u043d\u0430 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0442.\u0435. \u0442\u0430\u043a (<a href=\"http:\/\/stackoverflow.com\/q\/13489903\/1046374\">Alias to pointer (byte*) in C#<\/a>):<\/p>\n<pre><code class=\"cs\">using PixelArray = byte*, using PixelArray = byte[]<\/code><\/pre>\n<p>  \u0418 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0432 C# \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0449\u0435\u043c\u0441\u044f \u0432 Script#, \u0431\u044b\u043b\u0430 \u0432\u0432\u0435\u0434\u0435\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432:<\/p>\n<pre><code class=\"cs\">#if SCRIPTSHARP \t\t\tPixelArray data = context.GetPixelArray(); #elif DOTNET \t\t\tbyte* data = context.GetPixelArray(); #endif <\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 data \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 (\u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a, \u0440\u044b\u0431\u0438\u0439 \u0433\u043b\u0430\u0437, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u044b\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435), \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0435\u043d\u044b\u0445 \u0438 \u043d\u0435\u0442.<\/p>\n<p>  <a name=\"Links\"><\/a><\/p>\n<h5>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u044b<\/h5>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0432 \u0441\u043e\u043b\u044e\u0448\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u043e, \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u0435\u043b\u043e, \u043f\u0440\u043e\u0435\u043a\u0442\u044b Mono, Script# \u0438 \u0434\u0430\u0436\u0435 Silverlight \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u0443\u044e .NET \u0441\u0431\u043e\u0440\u043a\u0443. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0432 Visual Studio \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f <hh user=\"http:\/\/support.microsoft.com\/kb\/306234\"\/>\u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0444\u0430\u0439\u043b\u044b, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<p>  \u0410 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (DOTNET, SCRIPTSHARP \u0438 \u0442.\u0434.) \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Conditional Compilation Symbols.<\/p>\n<p>  <a name=\"DotnetNotes\"><\/a><\/p>\n<h4>\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043e .NET \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h4>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u043c \u0438 \u0430\u043b\u0438\u0430\u0441\u0430\u043c, \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043a\u043e\u0434 C# \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u043b\u0435\u0435 \u044f \u0445\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c .NET \u0438 JavaScript \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u043d\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u044b.<\/p>\n<p>  <a name=\"DisposeUsing\"><\/a><\/p>\n<h5>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Dispose<\/h5>\n<p>  \u0425\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 C# \u043a\u043b\u0430\u0441\u0441\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IDisposable, \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <b>Dispose<\/b> \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d <b>using<\/b>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c Bitmap \u0438 Context. \u042d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0438 \u0441\u043b\u043e\u0432\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0435\u043e\u0440\u0438\u044f, \u043d\u043e \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430: \u041d\u0430 ASP.NET Developer Server x86 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 (\u0434\u043e 2400*2400) \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u0430 \u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e. \u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 Dispose \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u0441\u0447\u0435\u0437\u043b\u0430. \u041e\u0431 \u044d\u0442\u043e\u043c \u0438 \u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043e\u0432\u0435\u0442\u0430\u0445 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0436\u0435 \u043f\u0438\u0448\u0443\u0442 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"http:\/\/www.nathanaeljones.com\/blog\/2009\/20-image-resizing-pitfalls\">20 Image Resizing Pitfalls<\/a> \u0438 <a href=\"http:\/\/blogs.msdn.com\/b\/tess\/archive\/2009\/02\/03\/net-memory-leak-to-dispose-or-not-to-dispose-that-s-the-1-gb-question.aspx\">.NET Memory Leak: To dispose or not to dispose, that\u2019s the 1 GB question<\/a>.<\/p>\n<p>  <a name=\"LockUsing\"><\/a><\/p>\n<h5>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 lock<\/h5>\n<p>  \u0412 JavaScript \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0443\u0436\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0441 \u0442\u0435\u0433\u043e\u043c <b>img<\/b>, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u043e\u0442\u043d\u043e\u043c \u0441 \u0442\u0435\u0433\u043e\u043c canvas, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 .NET \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c Bitmap. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0430\u043b\u0438\u0430\u0441\u044b Bitmap \u0438 Image \u0432 .NET \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043b\u0430\u0441\u0441 System.Drawing.Bitmap \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u044b\u0448\u0435.<\/p>\n<p>  \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u044d\u0442\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432 JavaScript \u043d\u0430 img \u0438 canvas \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u0438 \u0432 .NET \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438, \u0430 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d <b>lock<\/b> \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 lock, \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438):<\/p>\n<pre><code class=\"cs\">internal static Bitmap CloneImage(Image image) { #if SCRIPTSHARP \tBitmap result = (Bitmap)Document.CreateElement(&quot;canvas&quot;); \tresult.Width = image.Width; \tresult.Height = image.Height; \tGraphics context = (Graphics)result.GetContext(Rendering.Render2D); \tcontext.DrawImage(image, 0, 0); \treturn result; #else \tBitmap result; \tlock (image) \t\tresult = new Bitmap(image); \treturn result; #endif } <\/code><\/pre>\n<p>  \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e lock \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043b\u044e\u0431\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b).<\/p>\n<p>  <a name=\"MasksInMemory\"><\/a><\/p>\n<h5>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u043e\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438<\/h5>\n<p>  \u041f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432\u0441\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043c\u0430\u0441\u043a\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0439 \u0431\u044b \u0444\u043e\u0440\u043c\u0430\u0442 \u043d\u0435 \u0438\u043c\u0435\u043b\u0430 \u043c\u0430\u0441\u043a\u0430, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 Bitmap \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 4*2400*2400 ~ 24 \u041c\u0431 (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f 2400*2400, \u043a\u043e\u043b-\u0432\u043e \u0431\u0430\u0439\u0442 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u2014 4), \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u0441\u0435 \u043c\u0430\u0441\u043a\u0438 \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 (~30 \u0448\u0442\u0443\u043a) \u0438 \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439 (40 \u0448\u0442\u0443\u043a) \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 ~1.5 \u0413\u0431, \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u043c\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043c\u0430\u0441\u043e\u043a, \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c\u0441\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0436\u0430\u0442\u0438\u0435 \u043c\u0430\u0441\u043e\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (\u0432 \u0432\u0438\u0434\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 .jpg, .png) \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u0438\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 300 \u0440\u0430\u0437. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0441\u0436\u0430\u0442\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e <b>lock<\/b> \u0431\u0443\u0434\u0435\u0442 \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<p>  <a name=\"JavascriptNotes\"><\/a><\/p>\n<h4>\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043e JavaScript \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h4>\n<p>  <a name=\"Minification\"><\/a><\/p>\n<h5>\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/h5>\n<p>  \u042f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u043b \u0441\u043b\u043e\u0432\u043e \u00ab\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f\u00bb \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 \u0441\u043e \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f JavaScript, \u0441\u043b\u0430\u0431\u043e\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0442\u0435\u043c \u00ab\u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0438\u0432\u0430\u043d\u0438\u044f\u00bb \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 (\u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u0431 \u0438\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432, \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 <a href=\"http:\/\/habrahabr.ru\/post\/112530\/\">\u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0442\u043e\u043f\u0438\u043a\u043e\u0432<\/a>). \u041d\u0443 \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0442\u0430\u043a\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u0441\u0436\u0430\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d \u0432\u0435\u0441\u0438\u0442 ~80 \u041a\u0431).<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 JavaScript \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435:<\/p>\n<ul>\n<li><b>\u0412\u0440\u0443\u0447\u043d\u0443\u044e<\/b>. \u041d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f ScriptSharp.<\/li>\n<li><b>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/b>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u0430\u043f\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Google Closure Compiler, Yui.<\/li>\n<\/ul>\n<p>  <a name=\"ManualMinify\"><\/a><\/p>\n<h6>\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/h6>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u043e\u0440\u043e\u0442\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (public), \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<pre><code class=\"cs\">#if SCRIPTSHARP && !DEBUG     [ScriptName(&quot;a0&quot;)] #endif <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0441\u043e\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 JavaScript \u043a\u043e\u0434.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0437\u0430 \u0442\u0430\u043a\u0438\u043c\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u0432 \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u0445) \u0438 \u043f\u043e\u043b\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Script# \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0443\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0438\u043c\u0435\u043d\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043e\u043d \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 Script# \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0443\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e private \u0438 internal \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  <a name=\"AutoMinify\"><\/a><\/p>\n<h6>\u041c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/h6>\n<p>  \u0414\u043b\u044f \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 JavaScript \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0442\u0438\u043b\u0438\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Google Closure Compiler \u0432 \u0441\u0438\u043b\u0443 \u0431\u0440\u0435\u043d\u0434\u0430, \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0436\u0430\u0442\u0438\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c Google \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0436\u0438\u043c\u0430\u0442\u044c CSS \u0444\u0430\u0439\u043b\u044b, \u0437\u0430\u0442\u043e <a href=\"http:\/\/yui.github.com\/yuicompressor\/css.html\">YUI<\/a> \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u0435\u0442. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 Script# \u0442\u043e\u0436\u0435 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0445\u0443\u0436\u0435 GCC.<\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 Google \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0441\u0436\u0430\u0442\u0438\u044f: Whitespace, Simple \u0438 Advanced. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c Simple, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0445\u043e\u0442\u044f \u0438 \u043f\u0440\u0438 Advanced \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0436\u0430\u0442\u0438\u044f, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434\u0430 \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0431\u044b\u043b\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0438\u0437\u0432\u043d\u0435. \u041d\u0443 \u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Script#. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0435\u0441\u044c Google Closure \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c, \u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/javascript.ru\/optimize\/google-closure-compiler\">\u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a<\/a> \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439.<\/p>\n<p>  <a name=\"DebugRelease\"><\/a><\/p>\n<h5>Debug &#038; Release \u0440\u0435\u0436\u0438\u043c\u044b<\/h5>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 debug \u0438 release \u0432\u0435\u0440\u0441\u0438\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043a ASP.NET \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"html\">&lt;% if (Gfranq.JavaScriptFilters.HtmlHelper.IsDebug)    { %&gt;     &lt;script src=&quot;Scripts\/mscorlib.debug.js&quot; &gt;&lt;\/script&gt;     &lt;script src=&quot;Scripts\/imgProcLib.debug.js&quot; &gt;&lt;\/script&gt; &lt;% }    else    { %&gt;     &lt;script src=&quot;Scripts\/mscorlib.js&quot; &gt;&lt;\/script&gt;     &lt;script src=&quot;Scripts\/imgProcLib.js&quot; &gt;&lt;\/script&gt; &lt;% } %&gt; <\/code><\/pre>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u0438\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u043d\u043e \u0438 \u0444\u0430\u0439\u043b\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0442\u043e\u0436\u0435.<\/p>\n<p>  <a name=\"crossOrigin\"><\/a><\/p>\n<h5>\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e crossOrigin<\/h5>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 canvas. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u0440\u043e\u0441\u0441\u0434\u043e\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (CORS). \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 crossOrigin = &#187; \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435.<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043a \u043f\u0430\u043a\u0435\u0442\u0443 http \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/li>\n<\/ul>\n<p>  \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a ScriptSharp \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f img \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434:  <\/p>\n<pre><code class=\"cs\">[Imported] internal class AdvImage { \t[IntrinsicProperty] \tinternal string CrossOrigin \t{ \t\tget { return string.Empty; } \t\tset { } \t} } <\/code><\/pre>\n<p>  \u0410 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">((AdvImage)(object)result).CrossOrigin = &quot;&quot;; <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432 ScriptSharp \u0435\u0449\u0435 <a href=\"http:\/\/stackoverflow.com\/q\/13572711\/1046374\">\u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e wheelDelta<\/a> (\u0432\u043e \u0432\u0441\u044f\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 0.7.5), \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0435\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0435\u0441\u0438\u043a\u0430 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043b\u043b\u0430\u0436\u0430\u0445). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0430\u043a\u043e\u0439 \u0433\u0440\u044f\u0437\u043d\u044b\u0439 \u0445\u0430\u043a \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u2014 \u044d\u0442\u043e \u043f\u043b\u043e\u0445\u043e, \u0430 \u043f\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0444\u043e\u0440\u043a\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u041d\u043e \u044f \u043f\u043e\u043a\u0430 \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0442\u044c ScriptSharp \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 (\u0432 Global.asax):  <\/p>\n<pre><code class=\"cs\">Response.AppendHeader(&quot;Access-Control-Allow-Origin&quot;, &quot;*&quot;); <\/code><\/pre>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u043a\u0440\u043e\u0441\u0441\u0434\u043e\u043c\u0435\u043d\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"http:\/\/enable-cors.org\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  <a name=\"Optimizations\"><\/a><\/p>\n<h4>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/h4>\n<p>  <a name=\"Precalculs\"><\/a><\/p>\n<h5>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 (\u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0445) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/h5>\n<p>  \u0414\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438, \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0446\u0432\u0435\u0442\u0430 (r, g, b) \u0434\u043b\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430 \u0446\u0432\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435.<\/p>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0446\u0432\u0435\u0442\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:  <\/p>\n<pre><code class=\"cs\">for (int i = 0; I &lt; 256; i++) { \tr[i] = &lt;actionFuncR&gt;(i); \tg[i] = &lt;actionFuncG&gt;(i); \tb[i] = &lt;actionFuncB&gt;(i); } <\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0446\u0432\u0435\u0442\u0430:  <\/p>\n<pre><code class=\"cs\">for (int i = 0; i &lt; data.Length; i += 4) { \tdata[i] = r[data[i]]; \tdata[i + 1] = g[data[i + 1]]; \tdata[i + 2] = b[data[i + 2]]; } <\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0434\u0443\u0442 \u043f\u043e\u0434\u0440\u044f\u0434, \u0442\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c, \u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0446\u0432\u0435\u0442\u043e\u0432. \u041d\u043e \u0432 \u0441\u0438\u043b\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438\u0442\u0430\u043a \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u0440\u0435\u0448\u0435\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u0442\u0430\u043a\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0442\u0430\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438\u0437-\u0437\u0430 \u043d\u0435\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u043b\u0438\u0441\u0442\u0438\u043d\u0433 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f \u0432\u0441\u0435 \u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0443:  <\/p>\n<table>\n<tr>\n<td>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043a\u043e\u0434<\/td>\n<td>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434<\/td>\n<\/tr>\n<tr>\n<td>\n<pre><code class=\"cs\">\/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. for (int i = 0; i &lt; 256; i++) {       r[i] = &lt;actionFunc1R&gt;(i);       g[i] = &lt;actionFunc1G&gt;(i);       b[i] = &lt;actionFunc1B&gt;(i); } \u2026  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. for\u00a0(int\u00a0i\u00a0=\u00a00;\u00a0i\u00a0&lt;\u00a0data.Length;\u00a0i\u00a0+=\u00a04) {       data[i]\u00a0=\u00a0r[data[i]];       data[i + 1]\u00a0=\u00a0g[data[i + 1]];       data[i + 2]\u00a0=\u00a0b[data[i + 2]]; } \u2026  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. for (int i = 0; i &lt; 256; i++) {       r[i] = &lt;actionFunc2R&gt;(i);       g[i] = &lt;actionFunc2G&gt;(i);       b[i] = &lt;actionFunc2B&gt;(i); } \u2026  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. for\u00a0(int\u00a0i\u00a0=\u00a00;\u00a0i\u00a0&lt;\u00a0data.Length;\u00a0i\u00a0+=\u00a04) { \t       data[i]\u00a0=\u00a0r[data[i]];       data[i + 1]\u00a0=\u00a0g[data[i + 1]];       data[i + 2]\u00a0=\u00a0b[data[i + 2]]; } \u2026 <\/code><\/pre>\n<p>  <\/td>\n<td>\n<pre><code class=\"cs\">\/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. for (int i = 0; i &lt; 256; i++) {       r[i] = &lt;actionFunc1R&gt;(i);       g[i] = &lt;actionFunc1G&gt;(i);       b[i] = &lt;actionFunc1B&gt;(i); } \u2026  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. tr = r.Clone(); tg = g.Clone(); tb = b.Clone(); for (int i = 0; i &lt; 256; i++) {       r[i] = tr[&lt;actionFunc2R&gt;(i)];       g[i] = tg[&lt;actionFunc2G&gt;(i)];       b[i] = tb[&lt;actionFunc2B&gt;(i)]; } \u2026  \/\/ \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. for\u00a0(int\u00a0i\u00a0=\u00a00;\u00a0i\u00a0&lt;\u00a0data.Length;\u00a0i\u00a0+=\u00a04) { \t       data[i]\u00a0=\u00a0r[data[i]];       data[i + 1] = g[data[i + 1]];       data[i + 2] = b[data[i + 2]]; } \u2026 <\/code><\/pre>\n<p>  <\/td>\n<\/tr>\n<\/table>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0430\u0436\u0435 \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u043e\u0432\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0442\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Clone. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u044b\u0439 \u0438 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u044b (\u0442\u0443\u0442 \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f \u0441 <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0%D1%8F_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439<\/a>).<\/p>\n<p>  <a name=\"Pixels\"><\/a><\/p>\n<h5>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439<\/h5>\n<p>  \u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c JavaScript \u0432 Google Chrome \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f GetImageData (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f canvas \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u043e \u0447\u0435\u043c, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043f\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 Canvas \u0432 JavaScript.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u043f\u043e\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  <a name=\"CodeSamples\"><\/a><\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/h3>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u043e\u043f\u0438\u0448\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438. \u0427\u0442\u043e\u0431\u044b \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u043e\u0439, \u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u043b \u0438\u0445 \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u044b.<\/p>\n<p>  <a name=\"General\"><\/a><\/p>\n<h4>\u041e\u0431\u0449\u0438\u0435<\/h4>\n<p>  <a name=\"IsNumericSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0447\u0438\u0441\u043b\u043e\u043c<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">internal static bool IsNumeric(string n) { #if !SCRIPTSHARP \treturn ((Number)int.Parse(n)).ToString() != &quot;NaN&quot;; #else \tdouble number; \treturn double.TryParse(n, out number); #endif } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"IntegerDivSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">internal static int Div(int n, int k) { \tint result = n \/ k; #if SCRIPTSHARP \tresult = Math.Floor(n \/ k); #endif \treturn result; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"ImageRotateFlipSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 canvas \u0438 Bitmap \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 html5 canvas \u043d\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 90, 180 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u043a\u0440\u043e\u043c\u0435 \u043a\u0430\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u0442\u0440\u0438\u0446, \u0430 \u0432 .NET \u0435\u0441\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0442\u043e\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0441 \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 .NET \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u0432 \u043b\u044e\u0431\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 RotateFlip \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 Bitmap.<\/p>\n<pre><code class=\"cs\">public static Bitmap RotateFlip(Bitmap bitmap, RotFlipType rotFlipType) { #if SCRIPTSHARP \tint t, i4, j4, w, h, c;  \tif (rotFlipType == RotFlipType.RotateNoneFlipNone) \t\treturn bitmap;  \tGraphicsContext context; \tPixelArray data;  \tif (rotFlipType == RotFlipType.RotateNoneFlipX) \t{ \t\tcontext = GraphicsContext.GetContext(bitmap); \t\tdata = context.GetPixelArray(); \t\tw = bitmap.Width; \t\th = bitmap.Height;  \t\tfor (int i = 0; i &lt; h; i++) \t\t{ \t\t\tc = (i + 1) * w * 4 - 4; \t\t\tfor (int j = 0; j &lt; w \/ 2; j++) \t\t\t{ \t\t\t\ti4 = (i * w + j) * 4; \t\t\t\tj4 = j * 4;  \t\t\t\tt = (int)data[i4]; data[i4] = data[c - j4]; data[c - j4] = t; \t\t\t\tt = (int)data[i4 + 1]; data[i4 + 1] = data[c - j4 + 1]; data[c - j4 + 1] = t; \t\t\t\tt = (int)data[i4 + 2]; data[i4 + 2] = data[c - j4 + 2]; data[c - j4 + 2] = t; \t\t\t\tt = (int)data[i4 + 3]; data[i4 + 3] = data[c - j4 + 3]; data[c - j4 + 3] = t; \t\t\t} \t\t} \t\tcontext.PutImageData(); \t} \telse if (rotFlipType == RotFlipType.Rotate180FlipNone || rotFlipType == RotFlipType.Rotate180FlipX) \t{ \t\tcontext = GraphicsContext.GetContext(bitmap); \t\tdata = context.GetPixelArray(); \t\tw = bitmap.Width; \t\th = bitmap.Height; \t\tc = w * 4 - 4; \t\tint dlength4 = data.Length - 4; \t\tfor (int i = 0; i &lt; data.Length \/ 4 \/ 2; i++) \t\t{ \t\t\ti4 = i * 4; \t\t\tif (rotFlipType == RotFlipType.Rotate180FlipNone) \t\t\t\tj4 = i4; \t\t\telse \t\t\t\tj4 = (Math.Truncate((double)i \/ w) * w + (w - i % w)) * 4;  \t\t\tt = (int)data[j4]; data[j4] = data[dlength4 - i4]; data[dlength4 - i4] = t; \t\t\tt = (int)data[j4 + 1]; data[j4 + 1] = data[dlength4 - i4 + 1]; data[dlength4 - i4 + 1] = t; \t\t\tt = (int)data[j4 + 2]; data[j4 + 2] = data[dlength4 - i4 + 2]; data[dlength4 - i4 + 2] = t; \t\t\tt = (int)data[j4 + 3]; data[j4 + 3] = data[dlength4 - i4 + 3]; data[dlength4 - i4 + 3] = t; \t\t} \t\tcontext.PutImageData(); \t} \telse \t{ \t\tBitmap tempBitmap = PrivateUtils.CreateCloneBitmap(bitmap); \t\tGraphicsContext tempContext = GraphicsContext.GetContext(tempBitmap); \t\tPixelArray temp = tempContext.GetPixelArray();  \t\tt = bitmap.Width; \t\tbitmap.Width = bitmap.Height; \t\tbitmap.Height = t; \t\tcontext = GraphicsContext.GetContext(bitmap); \t\tdata = context.GetPixelArray();  \t\tw = tempBitmap.Width; \t\th = tempBitmap.Height; \t\tif (rotFlipType == RotFlipType.Rotate90FlipNone || rotFlipType == RotFlipType.Rotate90FlipX) \t\t{ \t\t\tc = w * h - w; \t\t\tfor (int i = 0; i &lt; temp.Length \/ 4; i++) \t\t\t{ \t\t\t\tt = Math.Truncate((double)i \/ h); \t\t\t\tif (rotFlipType == RotFlipType.Rotate90FlipNone) \t\t\t\t\ti4 = i * 4; \t\t\t\telse \t\t\t\t\ti4 = (t * h + (h - i % h)) * 4; \t\t\t\tj4 = (c - w * (i % h) + t) * 4; \/\/j4 = (w * (h - 1 - i4 % h) + i4 \/ h) * 4;  \t\t\t\tdata[i4] = temp[j4]; \t\t\t\tdata[i4 + 1] = temp[j4 + 1]; \t\t\t\tdata[i4 + 2] = temp[j4 + 2]; \t\t\t\tdata[i4 + 3] = temp[j4 + 3]; \t\t\t} \t\t} \t\telse if (rotFlipType == RotFlipType.Rotate270FlipNone || rotFlipType == RotFlipType.Rotate270FlipX) \t\t{ \t\t\tc = w - 1; \t\t\tfor (int i = 0; i &lt; temp.Length \/ 4; i++) \t\t\t{ \t\t\t\tt = Math.Truncate((double)i \/ h); \t\t\t\tif (rotFlipType == RotFlipType.Rotate270FlipNone) \t\t\t\t\ti4 = i * 4; \t\t\t\telse \t\t\t\t\ti4 = (t * h + (h - i % h)) * 4; \t\t\t\tj4 = (c + w * (i % h) - t) * 4; \/\/ j4 = w * (1 + i4 % h) - i4 \/ h - 1;  \t\t\t\tdata[i4] = temp[j4]; \t\t\t\tdata[i4 + 1] = temp[j4 + 1]; \t\t\t\tdata[i4 + 2] = temp[j4 + 2]; \t\t\t\tdata[i4 + 3] = temp[j4 + 3]; \t\t\t} \t\t} \t\tcontext.PutImageData(); \t}  \treturn bitmap; #elif DOTNET \tBitmap result = null; \tswitch (rotFlipType) \t{ \t\tcase RotFlipType.RotateNoneFlipNone: \t\t\tresult = bitmap; \t\t\tbreak; \t\tcase RotFlipType.Rotate90FlipNone: \t\t\tbitmap.RotateFlip(RotateFlipType.Rotate90FlipNone); \t\t\tresult = new Image(bitmap); \t\t\tbitmap.Dispose(); \t\t\tbreak; \t\tcase RotFlipType.Rotate270FlipNone: \t\t\tbitmap.RotateFlip(RotateFlipType.Rotate270FlipNone); \t\t\tresult = new Image(bitmap); \t\t\tbitmap.Dispose(); \t\t\tbreak; \t\tcase RotFlipType.Rotate180FlipNone: \t\t\tbitmap.RotateFlip(RotateFlipType.Rotate180FlipNone); \t\t\tresult = bitmap; \t\t\tbreak; \t\tcase RotFlipType.RotateNoneFlipX: \t\t\tbitmap.RotateFlip(RotateFlipType.RotateNoneFlipX); \t\t\tresult = bitmap; \t\t\tbreak; \t\tcase RotFlipType.Rotate90FlipX: \t\t\tbitmap.RotateFlip(RotateFlipType.Rotate90FlipX); \t\t\tresult = new Image(bitmap); \t\t\tbitmap.Dispose(); \t\t\tbreak; \t\tcase RotFlipType.Rotate180FlipX: \t\t\tbitmap.RotateFlip(RotateFlipType.Rotate180FlipX); \t\t\tresult = bitmap; \t\t\tbreak; \t\tcase RotFlipType.Rotate270FlipX: \t\t\tbitmap.RotateFlip(RotateFlipType.Rotate270FlipX); \t\t\tresult = new Image(bitmap); \t\t\tbitmap.Dispose(); \t\t\tbreak; \t}  \treturn result; #endif } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"AsyncSyncImageLoadSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 ScriptSharp \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f CollageImageLoad, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 .NET \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e (\u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430).<\/p>\n<pre><code class=\"cs\">public CollageData(string smallMaskPath, string bigMaskPath, List&lt;CollageDataPart&gt; dataParts) { \tSmallMaskImagePath = smallMaskPath; \tBigMaskImagePath = bigMaskPath; #if SCRIPTSHARP \tCurrentMask = PrivateUtils.CreateEmptyImage(); \tCurrentMask.AddEventListener(&quot;load&quot;, CollageImageLoad, false); \tCurrentMask.Src = CurrentMaskImagePath; #else \tCurrentMask = PrivateUtils.LoadBitmap(CurrentMaskImagePath); \tif (!CurrentMaskImagePath.Contains(&quot;http:\/\/&quot;) && !CurrentMaskImagePath.Contains(&quot;https:\/\/&quot;)) \t\tCurrentMask = Bitmap(CurrentMaskImagePath); \telse \t{ \t\tvar request = WebRequest.Create(CurrentMaskImagePath); \t\tusing (var response = request.GetResponse()) \t\t\tusing (var stream = response.GetResponseStream()) \t\t\t\tCurrentMask = (Bitmap)Bitmap.FromStream(stream); \t} #endif \tDataParts = dataParts; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"JavascriptOnly\"><\/a><\/p>\n<h5>\u0422\u043e\u043b\u044c\u043a\u043e Script#<\/h5>\n<p>  <a name=\"BrowserDetermSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 drag &#038; drop \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 (\u044f \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/modernizr.com\/\">modernizr<\/a>, \u043d\u043e \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0447\u0442\u043e Safari (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f Win) \u0438 IE9 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0435\u0433\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 drag &#038; drop \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e).<\/p>\n<pre><code class=\"cs\">internal static string BrowserVersion { \tget \t{ \t\tDetectBrowserTypeAndVersion(); \t\treturn _browserVersion; \t} }  private static void DetectBrowserTypeAndVersion() { \tif (!_browserDetected) \t{ \t\tstring userAgent = Window.Navigator.UserAgent.ToLowerCase(); \t\tif (userAgent.IndexOf(&quot;opera&quot;) != -1) \t\t\t_browser = BrowserType.Opera; \t\telse if (userAgent.IndexOf(&quot;chrome&quot;) != -1) \t\t\t_browser = BrowserType.Chrome; \t\telse if (userAgent.IndexOf(&quot;safari&quot;) != -1) \t\t\t_browser = BrowserType.Safari; \t\telse if (userAgent.IndexOf(&quot;firefox&quot;) != -1) \t\t\t_browser = BrowserType.Firefox; \t\telse if (userAgent.IndexOf(&quot;msie&quot;) != -1) \t\t{ \t\t\tint numberIndex = userAgent.IndexOf(&quot;msie&quot;) + 5; \t\t\t_browser = BrowserType.IE; \t\t\t_browserVersion = userAgent.Substring(numberIndex, userAgent.IndexOf(';', numberIndex)); \t\t} \t\telse \t\t\t_browser = BrowserType.Unknown; \t\t_browserDetected = true; \t} } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"DashDotLineSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043f\u0443\u043d\u043a\u0442\u0438\u0440\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0435\u0437\u043a\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0417\u0430 \u0438\u0434\u0435\u0438 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u043b \u0432 \u044d\u0442\u043e\u043c <a href=\"http:\/\/stackoverflow.com\/q\/4576724\/1046374\">\u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u043d\u0430 SO<\/a>.<\/p>\n<pre><code class=\"cs\">internal static void DrawDahsedLine(GraphicsContext context, double x1, double y1, double x2, double y2, int[] dashArray) { \tif (dashArray == null) \t\tdashArray = new int[2] { 10, 5 };  \tint dashCount = dashArray.Length; \tdouble dx = x2 - x1; \tdouble dy = y2 - y1; \tbool xSlope = Math.Abs(dx) &gt; Math.Abs(dy); \tdouble slope = xSlope ? dy \/ dx : dx \/ dy;  \tcontext.MoveTo(x1, y1); \tdouble distRemaining = Math.Sqrt(dx * dx + dy * dy); \tint dashIndex = 0; \twhile (distRemaining &gt;= 0.1) \t{ \t\tint dashLength = (int)Math.Min(distRemaining, dashArray[dashIndex % dashCount]); \t\tdouble step = Math.Sqrt(dashLength * dashLength \/ (1 + slope * slope)); \t\tif (xSlope) \t\t{ \t\t\tif (dx &lt; 0) step = -step; \t\t\tx1 += step; \t\t\ty1 += slope * step; \t\t} \t\telse \t\t{ \t\t\tif (dy &lt; 0) step = -step; \t\t\tx1 += slope * step; \t\t\ty1 += step; \t\t} \t\tif (dashIndex % 2 == 0) \t\t\tcontext.LineTo(x1, y1); \t\telse \t\t\tcontext.MoveTo(x1, y1); \t\tdistRemaining -= dashLength; \t\tdashIndex++; \t} } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"RotateAnimationSample\"><\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f setInterval. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0447\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f result \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043b\u0430\u0433\u043e\u0432 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">public void Rotate(bool cw) { \tif (!_rotating && !_flipping) \t{ \t\t_rotating = true; \t\t_cw = cw; \t\tRotFlipType oldRotFlipType = _curRotFlipType; \t\t_curRotFlipType = RotateRotFlipValue(_curRotFlipType, _cw);  \t\tint currentStep = 0; \t\tint stepCount = (int)(RotateFlipTimeSeconds * 1000 \/ StepTimeTicks); \t\tBitmap result = null; \t\t_interval = Window.SetInterval(delegate() \t\t{ \t\t\tif (currentStep &lt; stepCount) \t\t\t{ \t\t\t\tdouble absAngle = GetAngle(oldRotFlipType) + currentStep \/ stepCount * Math.PI \/ 2 * (_cw ? -1 : 1); \t\t\t\tDrawRotated(absAngle); \t\t\t\tcurrentStep++; \t\t\t} \t\t\telse \t\t\t{ \t\t\t\tWindow.ClearInterval(_interval); \t\t\t\tif (result != null) \t\t\t\t\tDraw(result); \t\t\t\t_rotating = false; \t\t\t} \t\t}, StepTimeTicks);  \t\tresult = GetCurrentTransformResult(); \t\tif (!_rotating) \t\t\tDraw(result); \t} }  private void DrawRotated(double rotAngle) { \t_resultContext.FillColor = FillColor; \t_resultContext.FillRect(0, 0, _result.Width, _result.Height);  \t_resultContext.Save();  \t_resultContext._graphics.Translate(_result.Width \/ 2, _result.Height \/ 2); \t_resultContext._graphics.Rotate(-rotAngle); \t_resultContext._graphics.Translate(-_origin.Width \/ 2, -_origin.Height \/ 2); \t_resultContext._graphics.DrawImage(_origin, 0, 0);  \t_resultContext.Restore(); }  private void Draw(Bitmap bitmap) { \t_resultContext.FillColor = FillColor; \t_resultContext.FillRect(0, 0, _result.Width, _result.Height);  \t_resultContext.Draw2(bitmap, (int)((_result.Width - bitmap.Width) \/ 2), (int)((_result.Height - bitmap.Height) \/ 2)); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"Conclusion\"><\/a><\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0440\u043e\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c C#, \u0441\u043e\u0432\u043c\u0435\u0449\u0430\u044f \u0432 \u0441\u0435\u0431\u0435 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434, \u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u043f\u043e\u0434 JavaScript. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b \u0441\u0434\u0435\u043b\u0430\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0443\u043f\u043e\u0440 \u043d\u0430 .NET \u0438 JavaScript, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0434 Android, iOS (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Mono) \u0438 Windows Phone \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u0430\u043c\u043d\u044f\u043c\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u0439 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u0434\u0435\u043b\u0435 \u043e\u043d \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043d\u0435\u0441\u043e\u0438\u0437\u043c\u0435\u0440\u0438\u043c\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u042f \u0434\u0443\u043c\u0430\u044e \u0447\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0438 \u0431\u0435\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u044f \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u0441\u043b\u0443\u0448\u0430\u0442\u044c\u0441\u044f \u043a \u043a\u0440\u0438\u0442\u0438\u043a\u0435 \u0438 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u0430\u0448\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c, \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u043a\u0430\u0440\u0442 google \u0441 ASP.NET \u0438 MS SQL \u0441 \u0446\u0435\u043b\u044c\u044e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439. \u0412 \u043d\u0435\u0439 \u0431\u0443\u0434\u0443\u0442 \u043e\u0441\u0432\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u043a:<\/p>\n<ul>\n<li>\u0413\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 MS SQL (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0438\u043c\u0438 \u0432 TSQL, C#, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b).<\/li>\n<li>\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/li>\n<li>Google maps \u0438 geocoding api (\u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0440\u043a\u0435\u0440\u043e\u0432).<\/li>\n<\/ul>\n<p>  P.S. \u0425\u043e\u0447\u0443 \u043f\u043e\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"http:\/\/gfranq.com\/\">gfranq.com<\/a> <a href=\"http:\/\/habrahabr.ru\/users\/oneuser\/\" class=\"user_link\">oneuser<\/a> \u0438 <a href=\"http:\/\/habrahabr.ru\/users\/vladaorlova\/\" class=\"user_link\">VladaOrlova<\/a>.    \t \t\t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/164439\/\"> http:\/\/habrahabr.ru\/post\/164439\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e \u0432\u0430\u0441, \u0445\u0430\u0431\u0440\u0430\u0432\u0447\u0430\u043d\u0435. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0442\u043e\u043f\u0438\u043a\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043e\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 C# \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0435 \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a .NET \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 (JavaScript). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441 \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 <a href=\"http:\/\/gfranq.com\/\">gfranq.com<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u043b\u0430\u0436\u0435\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u044f \u043d\u0435 \u0443\u043c\u0435\u044e \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0442\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0442\u0435\u043c\u0435:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/d07\/ead\/520\/d07ead5209a54ce4fbb083f1a0c746a1.png\"\/><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-164439","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/164439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=164439"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/164439\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=164439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=164439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=164439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}