рдкрд░рд┐рдЪрдп
рдЖрдкрдХреЛ рдирдорд╕реНрдХрд╛рд░ рд╣реИ, рд╣рдмреНрд░реНрд╡рд╛рдЪреЗрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ, рдореИрдВ рдореБрдЦреНрдпрддрдГ .NET рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рдЬреИрд╕реЗ рд╡рд┐рд╖рдо рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП C # рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡реЗ рд╡реЗрдм-рдЖрдзрд╛рд░рд┐рдд рдлреЛрдЯреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗрд╡рд╛
gfranq.com рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдлреЛрдЯреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрд▓рд╛рдЬ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднреА рд╣реИред
рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╡рд┐рд╖рдп рдкрд░ рд╣реЛрдЧрд╛:

рд╕рд╛рдордЧреНрд░реА
рд▓рдХреНрд╖реНрдпрдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛрдб рдЙрджрд╛рд╣рд░рдгрдирд┐рд╖реНрдХрд░реНрд╖рд▓рдХреНрд╖реНрдп
рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рдлрд╝рд┐рд▓реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдлрд╝реЛрдЯреЛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреЛрд▓рд╛рдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ, рд╕рд░реНрд╡рд░ рдкрд░ред рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХреЛрд▓рд╛рдЬ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг
рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ
рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝реЛрдЯреЛрд╢реЙрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ (рдХреНрд░рд┐рдпрд╛рдУрдВ) рдХреЗ рдЕрдиреБрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлреЛрдЯреЛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реЛ рд╕рдХрддреА рд╣реИ:
- рдЪрдордХ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ
- рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрджрд▓рдирд╛
- рд╕рдВрддреГрдкреНрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди
- рд░рдВрдЧ рд╡рдХреНрд░ рд╕реБрдзрд╛рд░
- рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд▓реЗ рдорд╛рд╕реНрдХ
- рдлреНрд░реЗрдо рдУрд╡рд░рд▓реЗ
- ...
рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдмреЗрд╢рдХ, рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ JSON рдФрд░ XML, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛:
- рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (.NET, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, WinPhone, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛ред
- рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рд░рд▓ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
- XML рдФрд░ JSON рдЕрдзрд┐рдХ рд╡рдЬрди (рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ
XPro рдлрд╝рд┐рд▓реНрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдлрд╝реЛрдЯреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд░реЙрдкрд┐рдВрдЧ рдФрд░ рдЫрд╡рд┐ рд░реЛрдЯреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рд░реЛрдЯреЗрд╢рди рдФрд░ рдХреНрд░реЙрдкрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдП, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╡реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдПред
рдХреЛрд▓рд╛рдЬ рд╡рд┐рд╡рд░рдг
рдХреЛрд▓рд╛рдЬ рдХреЛ рдХрдИ рд▓рдШреБ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдореБрдЦреМрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдмрд┐рдирд╛ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрд▓рд╛рдЬ рдкрд░ рдЙрдкрд▓рдмреНрдз рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЫреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдкреИрдорд╛рдиреЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдПрдХ рдХреЛрд▓рд╛рдЬ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:

рдХреЛрд▓рд╛рдЬ рднреА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд░рд▓ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ 0 рд╕реЗ 1 рддрдХ, рдлреЛрдЯреЛ рдХреЗ рдкрддреЗ, рд╕рд╛рде рд╣реА рдЙрдирдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдХреЛ рдмрдбрд╝реЗ рдлрд╝реЛрдЯреЛ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕рд▓рд┐рдП, рдПрдХ рдРрд╕рд╛ рдордВрдЪ рдЪреБрдирдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХреЛрд▓рд╛рдЬ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛рдо рдХреА рд╣реЛред
рдлрд╝реЛрдЯреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪреБрдирдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд░рдЖрдИрдП рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдореМрдЬреВрдж рд╣реИрдВ:
- рдПрдбреЛрдм рдлреНрд▓реИрд╢
- рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ
- HTML 5 + рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
- рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдЧреНрд░рд╛рд╣рдХ
рдкреВрд░реА рд╕реВрдЪреА рдореЗрдВ рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдлреНрд▓реИрд╢ рдФрд░ HTML 5 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╕рднреА рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рднреА рдзреАрд░реЗ-рдзреАрд░реЗ рдорд░ рд░рд╣реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡
рдореЗрдВ NaCl
рдирдордХ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕, рдпрд╣ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдкрд░ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рд╣реЛрдЧрд╛ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рдПрдХ рдЯреНрд░реЗрдВрдбреА рдФрд░ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛, рдЬреЛ рдлреНрд▓реИрд╢ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрднрд╡рддрдГ рдЖрдИрдУрдПрд╕ рдкрд░ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЗрд╕ рддрдереНрдп рд╕реЗ рднреА рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╕реА # рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкрд░ рдЖрдЧреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рдг рд╕реА #
рдкрд┐рдЫрд▓реЗ рдЦрдВрдб рдореЗрдВ, рд╡рд┐рдХрд╛рд╕ рдордВрдЪ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛: HTML 5 + рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реА # рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ .NET рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛрдиреЛрдВ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╛рдП рдЧрдП:
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк,
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛
# рдХреНрдпреЛрдВрдХрд┐ JSIL рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдо рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ C # рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ), рдФрд░ SharpKit рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╣реИред
рдЬреЗрдПрд╕рдЖрдИрдПрд▓ рдмрдирд╛рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ # рдмрдирд╛рдо SharpKit рд╕рд╡рд╛рд▓ рдкрд░ stackoverflow рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рддреБрд▓рдирд╛ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ, рдореИрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ ScriptSharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
рд▓рд╛рдн:- .NET рдФрд░ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ (WP, рдореЛрдиреЛ) рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
- рдУрдУрдкреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреЛрд░рджрд╛рд░ рдЯрд╛рдЗрдк рд╕реА # рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ред
- рдЖрдИрдбреАрдИ рд╡рд┐рдХрд╛рд╕ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рдСрдЯреЛ-рдкреВрд░рд╛, рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ)ред
- рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдХрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рдиред
рдиреБрдХрд╕рд╛рди:- рдЕрддрд┐рд░реЗрдХ рдФрд░ рдЧреИрд░-рдорд╛рдирдХрддрд╛ рдЙрддреНрдкрдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (mscorlib рдХреЗ рдХрд╛рд░рдг)ред
- рдХреЗрд╡рд▓ ISO-2 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ (рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдЕрдзрд┐рднрд╛рд░, рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди, рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдЬреЗрдирд░рд┐рдХ рдФрд░ рдЕрдзрд┐рдХ)ред
рд╕рдВрд░рдЪрдирд╛
рдЙрд╕реА рдХреЛрдб рдХреЗ .NET рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХреЛ рдирд┐рдореНрди рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ .NET рдФрд░ HTML5 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрдХрдиреАрдХ рд╣реИрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдпрд╣ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .NET рдореЗрдВ
рдмрд┐рдЯрдореИрдк рд╣реИ , рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ,
рдХреИрдирд╡рд╛рд╕ рдЗрд╕рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИред
рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдФрд░
рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде , рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд░рдгрд┐рдпрд╛рдБ рднреАред рдпрд╣ рд╕рдм рдПрдХ рдХреЛрдб рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

рдмреЗрд╢рдХ, рдпрд╣ рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрд╣ WP рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░, рд╕рдВрднрд╡рддрдГ, рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХ рдСрдкрд░реЗрд╢рди рд╣реИрдВ:
- рдПрдкреАрдЖрдИ рдХрд╛рд░реНрдпреЛрдВ (рдбреНрд░рд╛рдЗрдореЗрдЬ, рдЖрд░реНрдХ, рдореВрд╡реНрдЯреЛ, рд▓рд╛рдЗрдирдЯреВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рд▓рд╛рдн рдЙрдЪреНрдЪ рдЧрддрд┐ рдФрд░ рд╕рдВрднрд╡ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рд╣реИред рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд┐рдХреНрд╕реЗрд▓ред рд▓рд╛рдн рдХрд┐рд╕реА рднреА рдкреНрд░рднрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдПрдХреАрдХреГрдд рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдиреБрдХрд╕рд╛рди рдХрдо рдЧрддрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдиреБрдХрд╕рд╛рди рдХреЛ рд╕рдордХрд╛рд░реАрдХрд░рдг, рд╢реЗрдбреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдФрд░ рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдХреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ (рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдкрд░ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА) рджреНрд╡рд╛рд░рд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ
рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ , рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд┐рдЯрдореИрдк рдФрд░ рдХреИрдирд╡рд╕ рдЬреИрд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
рдЙрдкрдирд╛рдо рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рд╕рд╛рде рд╣реА рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ WP рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ,
рдПрдбреЗрдкреНрдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
#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
рд╣рд╛рд▓рд╛рдБрдХрд┐, C # рдореЗрдВ, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдЖрдк рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдЙрдкрдирд╛рдо рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ, рдЕрд░реНрдерд╛рддреНред рдЗрд╕ рддрд░рд╣ (
рдПрд▓рд┐рд╕ рдЯреВ рдкреЙрдЗрдВрдЯрд░ (рдмрд╛рдЗрдЯ *) C # рдореЗрдВ ):
using PixelArray = byte*, using PixelArray = byte[]
рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП C # рдореЗрдВ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рд╕рдордп рд╕реНрдХреНрд░рд┐рдкреНрдЯ # рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдРрд╕реА рдпреЛрдЬрдирд╛ рдкреЗрд╢ рдХреА:
#if SCRIPTSHARP PixelArray data = context.GetPixelArray(); #elif DOTNET byte* data = context.GetPixelArray(); #endif
рдЗрд╕рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдкрд┐рдХреНрд╕реЗрд▓-рдмрд╛рдп-рдкрд┐рдХреНрд╕реЗрд▓ рдСрдкрд░реЗрд╢рди (рдЬреИрд╕реЗ рдорд╛рд╕реНрдХрд┐рдВрдЧ, рдлрд╝рд┐рд╢реЗ, рдмрджрд▓рддреЗ рд╕рдВрддреГрдкреНрддрд┐ рдФрд░ рдЕрдиреНрдп) рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдВрдХ
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореЛрдиреЛ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ # рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рднреА рдПрдХ рдирд┐рдпрдорд┐рдд .NET рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИ
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ, рдЬреЛ рдЖрдкрдХреЛ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдФрд░ рд╕рдВрдХрд▓рди рдирд┐рд░реНрджреЗрд╢реЛрдВ (DOTNET, SCRIPTSHARP, рдЖрджрд┐) рдХрд╛ рд╕рдВрдХреЗрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЧреБрдгреЛрдВ рдореЗрдВ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди рдкреНрд░рддреАрдХреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред
.NET рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдиреЛрдЯреНрд╕
рдЙрдкрд░реЛрдХреНрдд рд╕рд╛рд░ рдФрд░ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реА # рдХреЛрдб рдЕрддрд┐рд░реЗрдХ рдХреЗ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдЧреЗ рдореИрдВ .NET рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдбрд┐рд╕реНрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ C # рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд┐ рдЖрдИрдбреАрд╕реЛрдлрд░реЗрдмрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
рдбрд┐рд╕реНрдкреЛрдЬрд╝ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рдмрд┐рдЯрдореИрдк рдФрд░ рд╕рдВрджрд░реНрдн рдереАрдВред рдпреЗ рдХреЗрд╡рд▓ рдореЗрд░реЗ рд╢рдмреНрдж рдФрд░ рдХреЗрд╡рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдирд╣реАрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЕрднреНрдпрд╛рд╕ рднреА рд╣реИрдВ: ASP.NET рдбреЗрд╡рд▓рдкрд░ рд╕рд░реНрд╡рд░ x86 рд╕рд░реНрд╡рд░ рдкрд░, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрдбрд╝реА рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ (2400 * 2400 рддрдХ) рд╕реНрдореГрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдбрд┐рд╕реНрдкреЛрдЬрд▓ рдХреЛ рд╕рд╣реА рдЬрдЧрд╣реЛрдВ рдкрд░ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдорд╕реНрдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИред рдпрд╣ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЯрд┐рдкреНрд╕ рднреА рдЖрд░реНрдЯрд┐рдХрд▓
20 рдЗрдореЗрдЬ рд░рд┐рд╕рд╛рдЗрдЬрд┐рдВрдЧ рдкреЙрдЯрд┐рд╢ рдФрд░
.NET рдореЗрдореЛрд░реА рд▓реАрдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдбрд┐рд╕реНрдкреЛрдЬ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ 1 рдЬреАрдмреА рдкреНрд░рд╢реНрди рд╣реИ ред
рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ,
img рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрд▓рдЧрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реНрд░реЛрдд рдФрд░ рд▓реЛрдб рдЗрд╡реЗрдВрдЯ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреИрдирд╡рд╛рд╕ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХреИрдирд╡рд╛рд╕ рдХреЗ рдмреАрдЪ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рдХреБрдЫ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, .NET рдореЗрдВ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд┐рдВрдЧрд▓ рдмрд┐рдЯрдореИрдк рдХреНрд▓рд╛рд╕ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдкрдирд╛рдо рдмрд┐рдЯрдореИрдк рдФрд░ рдЫрд╡рд┐ .NET рдореЗрдВ рд╕рдорд╛рди System.Drawing.Bitmap рд╡рд░реНрдЧ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдлрд┐рд░ рднреА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ img рдФрд░ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдпрд╣ рдЕрд▓рдЧрд╛рд╡ рднрд╡рд┐рд╖реНрдп рдореЗрдВ .NET рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡-рд▓реЛрдб рдХрд┐рдП рдЧрдП рдорд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
рд▓реЙрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЫрд╡рд┐ рд▓реЙрдХ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдЕрд╡рд░реБрджреНрдз рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
internal static Bitmap CloneImage(Image image) { #if SCRIPTSHARP Bitmap result = (Bitmap)Document.CreateElement("canvas"); result.Width = image.Width; result.Height = image.Height; Graphics context = (Graphics)result.GetContext(Rendering.Render2D); context.DrawImage(image, 0, 0); return result; #else Bitmap result; lock (image) result = new Bitmap(image); return result; #endif }
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рдЧреБрдг рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ)ред
рд╕реНрдореГрддрд┐ рдореЗрдВ рдорд╛рд╕реНрдХ рдХрд╛ рднрдВрдбрд╛рд░рдг
рдЬрдм рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд┐рд▓реНрдЯрд░ рдорд╛рд╕реНрдХ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдореБрдЦреМрдЯрд╛ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рднреА рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рд╣реИ, рд╕рд░реНрд╡рд░ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрд┐рдЯрдореИрдк 4 * 2400 * 2400 ~ 24 рдПрдордмреА (рдЕрдзрд┐рдХрддрдо рдЫрд╡рд┐ рдЖрдХрд╛рд░ 2400 * 2400 рд╣реИ, рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 4 рд╣реИ), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдорд╛рд╕реНрдХ ( ~ 30 рдЯреБрдХрдбрд╝реЗ) рдФрд░ рдХреЛрд▓рд╛рдЬ (40 рдЯреБрдХрдбрд╝реЗ) рдореЗрдореЛрд░реА рдореЗрдВ ~ 1.5 рдЬреАрдмреА рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдВрдЧреЗ, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рд╕реНрдХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдХрд╛рдлреА рдмрдврд╝ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдореЗрдореЛрд░реА рдореЗрдВ рдорд╛рд╕реНрдХ рдХреЗ рд╕рдВрдкреАрдбрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (.jpg, .png рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ), рдЙрдкрдпреЛрдЧ рдХреЗ рджреМрд░рд╛рди рдЙрдиреНрд╣реЗрдВ рдЕрдирдкреИрдХ рдХрд░рдХреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдХрд╛рд░ рдХреЛ рд▓рдЧрднрдЧ 300 рдЧреБрдирд╛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕рдВрдкреАрдбрд╝рд┐рдд рдЫрд╡рд┐ рдХреЛ рдмрдбрд╝реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
рд▓реЙрдХ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдХрдо рд╕рдордп рд▓рдЧреЗрдЧрд╛ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХрдо рдЕрд╡рд░реБрджреНрдз рд╣реЛрдВрдЧреЗред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреЛрдЯ
minification
рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЦрдВрдб рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ "рдУрдлрд┐рд╕рдХреНрдпреВрд╢рди" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢рдмреНрдж рд╣рд░ рд╕рдордп рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЛ "рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣рдЪрд╛рдирдиреЗ" рдХреЗ рджреНрд╡рд╛рд░рд╛ рддрд░реНрдХ рдФрд░ рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдо
рдЕрдм рдХрд┐рд╕реА рдПрдХ рд╡рд┐рд╖рдп рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд┐рдХреГрдд рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рддрдХрдиреАрдХ рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдЕрдм рдЗрд╕рдХрд╛ рд╡рдЬрди ~ 80 рдХреЗрдмреАрдкреА рд╕рдВрдХреБрдЪрд┐рдд рд░реВрдк рдореЗрдВ рд╣реИ)ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреНрдпреВрдирддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ:
- рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ ред рдЙрддреНрдкрд╛рджрди рдЪрд░рдг рдореЗрдВ, ScriptSharp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред
- рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ ред рдкреАрдврд╝реА рдЪрд░рдг рдХреЗ рдмрд╛рджред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ Google рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░, рдпреВрдЖрдИред
рдореИрдиреБрдЕрд▓ minification рд╣реИ
рд╡рд┐рдзрд┐рдпреЛрдВ, рд╡рд░реНрдЧреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдо рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдШреЛрд╖рдгрд╛рдУрдВ рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдмрд╛рд╣рд░реА рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ) рд╕реЗ рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
#if SCRIPTSHARP && !DEBUG [ScriptName("a0")] #endif
рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдЕрднреА рднреА рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрдиреНрдп рдиреБрдХрд╕рд╛рди рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдХрд╛ рдХреНрд▓реЙрдЧрд┐рдВрдЧ рд╣реИ рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рддрдХрдиреАрдХ рдЙрддреНрдкрдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред
рдПрдХ рдФрд░ рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдРрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдореЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо (рд╡рд┐рд╢реЗрд╖рдХрд░ рд╡рдВрд╢рдЬ рдореЗрдВ рдЕрддрд┐рднрд╛рд░рд┐рдд) рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ # рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╛рдореЛрдВ рдкрд░ рд╢рдкрде рдирд╣реАрдВ рд▓реЗрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣ рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреНрд▓рд╛рд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред
рд╡реИрд╕реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ # рдХреЗ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рдЬреА рдФрд░ рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдиреНрдпреВрдирддрдо
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдмреНрд░рд╛рдВрдб, рдЕрдЪреНрдЫреА рд╕рдВрдкреАрдбрд╝рди рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдХрд╛рд░рдг Google рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, Google рдХреЗ рдорд┐рдирд┐рдлрд╝рд╛рдпрд░ рдХрд╛ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ CSS рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
YUI рдХрд░ рд╕рдХрддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, Script # рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдХреЛ рднреА рдорд┐рдирд┐рдорд╛рдЗрдЬ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕реЗ GCC рд╕реЗ рдХрд╛рдлреА рдЦрд░рд╛рдм рдмрдирд╛ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ Google рдорд┐рдиреАрдлрд╝рд╛рдпрд░ рдореЗрдВ рдХрдИ рд╕рдВрдкреАрдбрд╝рди рд╕реНрддрд░ рд╣реЛрддреЗ рд╣реИрдВ: рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк, рд╕рд░рд▓ рдФрд░ рдЙрдиреНрдирддред рд╕рд░рд▓ рд╕реНрддрд░ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдиреНрдирдд рдХреЗ рд╕рд╛рде рдЖрдк рдЕрдзрд┐рдХрддрдо рд╕рдВрдкреАрдбрд╝рди рдЧреБрдгрд╡рддреНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рддрд░реАрдХреЗ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рд╣реЛрдВред рдЦреИрд░, рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдорд┐рдирд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк Google рдХреНрд▓реЛрдЬрд░ рдорд┐рдирд┐рдлрд╛рдпрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд▓реЗрдЦреЛрдВ
рдХреА рдЗрд╕ рд╕реВрдЪреА рдХреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдбрд┐рдмрдЧ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рдореЛрдб
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдбрд┐рдмрдЧ рдФрд░ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ ASP.NET рдкреГрд╖реНрдареЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
<% if (Gfranq.JavaScriptFilters.HtmlHelper.IsDebug) { %> <script src="Scripts/mscorlib.debug.js" ></script> <script src="Scripts/imgProcLib.debug.js" ></script> <% } else { %> <script src="Scripts/mscorlib.js" ></script> <script src="Scripts/imgProcLib.js" ></script> <% } %>
рд╡реИрд╕реЗ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рди рдХреЗрд╡рд▓ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдмрд▓реНрдХрд┐ рд╡рд┐рд╡рд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднреА рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреНрд░реЙрд╕рдСрд░рд┐рдЬрд┐рди рд╕рдВрдкрддреНрддрд┐
рдХреБрдЫ рдЫрд╡рд┐ рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдХреНрд░реЙрд╕ рдбреЛрдореЗрди рдПрдХреНрд╕реЗрд╕ (CORS) рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
- рдЧреНрд░рд╛рд╣рдХ рдкрд░ crossOrigin = '' рдбрд╛рд▓рдирд╛ред
- рд╕рд░реНрд╡рд░ рдкрд░ http рдкреИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдирд╛ред
рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ ScriptSharp img рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:
[Imported] internal class AdvImage { [IntrinsicProperty] internal string CrossOrigin { get { return string.Empty; } set { } } }
рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
((AdvImage)(object)result).CrossOrigin = "";
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рд╕рдорд╛рди рддрдХрдиреАрдХ рдЖрдкрдХреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, ScriptSharp рдиреЗ
рдЕрднреА рддрдХ рд╡реНрд╣реАрд▓реНрдбреЗрд▓реНрдЯрд╛ рд╕рдВрдкрддреНрддрд┐ (рдХрдо рд╕реЗ рдХрдо рд╕рдВрд╕реНрдХрд░рдг 0.7.5 рдореЗрдВ) рдХреЛ
рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ , рдЬреЛ рд╡реНрд╣реАрд▓ рд░реЛрдЯреЗрд╢рди (рдХреЛрд▓рд╛рдЬ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд) рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдЧрдВрджрд╛ рд╣реИрдХ рдЦрд░рд╛рдм рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╛рдВрдЯреЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕реНрдкрд╛рд░ рдХреЛ рд╕реНрд░реЛрдд рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдРрд╕реА рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрд░, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЗрдбрд░ (Global.asax рдореЗрдВ) рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Response.AppendHeader("Access-Control-Allow-Origin", "*");
рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдПрдХреНрд╕реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА
рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА
рд╣реИ ред
рдЕрдиреБрдХреВрд▓рди
рдкреНрд░реАрдХрдореНрдкреНрдпреВрдЯреЗрдб (рд╕рд╛рд░рдгреАрдмрджреНрдз) рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрдордХ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдФрд░ рд░рдВрдЧ рдШрдЯрддрд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП, рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рд░рдВрдЧ рдШрдЯрдХреЛрдВ (рдЖрд░, рдЬреА, рдмреА) рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЧрдгрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреЗрд╡рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрдбрд╝реЛрд╕реА рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░рд┐рдгрд╛рдореА рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреА рдЧрдгрдирд╛:
for (int i = 0; i < 256; i++) { r[i] = <actionFuncR>(i); g[i] = <actionFuncG>(i); b[i] = <actionFuncB>(i); }
рдкреВрд░реНрд╡рдирд┐рд░реНрдорд┐рдд рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
for (int i = 0; i < data.Length; i += 4) { data[i] = r[data[i]]; data[i + 1] = g[data[i + 1]]; data[i + 2] = b[data[i + 2]]; }
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ рдРрд╕реА рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рддреЛ рдордзреНрдпрд╡рд░реНрддреА рдЫрд╡рд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдЖрдорддреМрд░ рдкрд░ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд░рдВрдЧреАрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреЛрдб рдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЕрдм рддрдХ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЙрд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдПрдВ рднреА рдереАрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдРрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреА рд╕реВрдЪреА рджреВрдВрдЧрд╛:
рдирд┐рдпрдорд┐рдд рдХреЛрдб | рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЛрдб |
|
|
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рд╕рд╣реА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрд▓реЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдП рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рд╕рд░рдгреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╕ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХреЗрдд рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рд╣рдо
рдбрдмрд▓ рдмрдлрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ)ред
рдЫрд╡рд┐ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓реЗрдВ
Google Chrome рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдиреЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рдХрд┐ GetImageData рдлрд╝рдВрдХреНрд╢рди (рдЬреЛ рдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреИрдирд╡рд╕ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦреЛрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдХрдо рд╕реЗ рдХрдо рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рдорд╛рди, рдкрд┐рдХреНрд╕реЗрд▓-рдмрд╛рдп-рдкрд┐рдХреНрд╕реЗрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдХреЛрдб рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдБ рдореИрдВ рдЙрди рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд░реЛрдЪрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗред рд▓реЗрдЦ рдХреЛ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ internal static bool IsNumeric(string n) { #if !SCRIPTSHARP return ((Number)int.Parse(n)).ToString() != "NaN"; #else double number; return double.TryParse(n, out number); #endif }
рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди internal static int Div(int n, int k) { int result = n / k; #if SCRIPTSHARP result = Math.Floor(n / k); #endif return result; }
рдХреНрд░рдорд╢рдГ рдХреИрдирд╡рд╛рд╕ рдФрд░ рдмрд┐рдЯрдореИрдк рдкрд░ рдЫрд╡рд┐ рдХреЛ рдШреБрдорд╛ рдФрд░ рдЙрд▓рдЯ рд░рд╣рд╛ рд╣реИрдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ html5 рдХреИрдирд╡рд╕ рдореЗрдВ рдореЗрдЯреНрд░рд┐рд╕реЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЫрд╡рд┐ 90, 180 рдбрд┐рдЧреНрд░реА рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди .NET рдореЗрдВ рд╣реИрдВред рддреЛ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдВрдЧрдд рд╕рдЯреАрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ .NET рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛ рдореЗрдВ 90 рдбрд┐рдЧреНрд░реА рдХрд╛ рд░реЛрдЯреЗрд╢рди рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд░реЛрдЯреЗрдЯрдлреНрд▓рд┐рдк рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рдмрд┐рдЯрдореИрдк рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
public static Bitmap RotateFlip(Bitmap bitmap, RotFlipType rotFlipType) { #if SCRIPTSHARP int t, i4, j4, w, h, c; if (rotFlipType == RotFlipType.RotateNoneFlipNone) return bitmap; GraphicsContext context; PixelArray data; if (rotFlipType == RotFlipType.RotateNoneFlipX) { context = GraphicsContext.GetContext(bitmap); data = context.GetPixelArray(); w = bitmap.Width; h = bitmap.Height; for (int i = 0; i < h; i++) { c = (i + 1) * w * 4 - 4; for (int j = 0; j < w / 2; j++) { i4 = (i * w + j) * 4; j4 = j * 4; t = (int)data[i4]; data[i4] = data[c - j4]; data[c - j4] = t; t = (int)data[i4 + 1]; data[i4 + 1] = data[c - j4 + 1]; data[c - j4 + 1] = t; t = (int)data[i4 + 2]; data[i4 + 2] = data[c - j4 + 2]; data[c - j4 + 2] = t; t = (int)data[i4 + 3]; data[i4 + 3] = data[c - j4 + 3]; data[c - j4 + 3] = t; } } context.PutImageData(); } else if (rotFlipType == RotFlipType.Rotate180FlipNone || rotFlipType == RotFlipType.Rotate180FlipX) { context = GraphicsContext.GetContext(bitmap); data = context.GetPixelArray(); w = bitmap.Width; h = bitmap.Height; c = w * 4 - 4; int dlength4 = data.Length - 4; for (int i = 0; i < data.Length / 4 / 2; i++) { i4 = i * 4; if (rotFlipType == RotFlipType.Rotate180FlipNone) j4 = i4; else j4 = (Math.Truncate((double)i / w) * w + (w - i % w)) * 4; t = (int)data[j4]; data[j4] = data[dlength4 - i4]; data[dlength4 - i4] = t; t = (int)data[j4 + 1]; data[j4 + 1] = data[dlength4 - i4 + 1]; data[dlength4 - i4 + 1] = t; t = (int)data[j4 + 2]; data[j4 + 2] = data[dlength4 - i4 + 2]; data[dlength4 - i4 + 2] = t; t = (int)data[j4 + 3]; data[j4 + 3] = data[dlength4 - i4 + 3]; data[dlength4 - i4 + 3] = t; } context.PutImageData(); } else { Bitmap tempBitmap = PrivateUtils.CreateCloneBitmap(bitmap); GraphicsContext tempContext = GraphicsContext.GetContext(tempBitmap); PixelArray temp = tempContext.GetPixelArray(); t = bitmap.Width; bitmap.Width = bitmap.Height; bitmap.Height = t; context = GraphicsContext.GetContext(bitmap); data = context.GetPixelArray(); w = tempBitmap.Width; h = tempBitmap.Height; if (rotFlipType == RotFlipType.Rotate90FlipNone || rotFlipType == RotFlipType.Rotate90FlipX) { c = w * h - w; for (int i = 0; i < temp.Length / 4; i++) { t = Math.Truncate((double)i / h); if (rotFlipType == RotFlipType.Rotate90FlipNone) i4 = i * 4; else i4 = (t * h + (h - i % h)) * 4; j4 = (c - w * (i % h) + t) * 4; //j4 = (w * (h - 1 - i4 % h) + i4 / h) * 4; data[i4] = temp[j4]; data[i4 + 1] = temp[j4 + 1]; data[i4 + 2] = temp[j4 + 2]; data[i4 + 3] = temp[j4 + 3]; } } else if (rotFlipType == RotFlipType.Rotate270FlipNone || rotFlipType == RotFlipType.Rotate270FlipX) { c = w - 1; for (int i = 0; i < temp.Length / 4; i++) { t = Math.Truncate((double)i / h); if (rotFlipType == RotFlipType.Rotate270FlipNone) i4 = i * 4; else i4 = (t * h + (h - i % h)) * 4; j4 = (c + w * (i % h) - t) * 4; // j4 = w * (1 + i4 % h) - i4 / h - 1; data[i4] = temp[j4]; data[i4 + 1] = temp[j4 + 1]; data[i4 + 2] = temp[j4 + 2]; data[i4 + 3] = temp[j4 + 3]; } } context.PutImageData(); } return bitmap; #elif DOTNET Bitmap result = null; switch (rotFlipType) { case RotFlipType.RotateNoneFlipNone: result = bitmap; break; case RotFlipType.Rotate90FlipNone: bitmap.RotateFlip(RotateFlipType.Rotate90FlipNone); result = new Image(bitmap); bitmap.Dispose(); break; case RotFlipType.Rotate270FlipNone: bitmap.RotateFlip(RotateFlipType.Rotate270FlipNone); result = new Image(bitmap); bitmap.Dispose(); break; case RotFlipType.Rotate180FlipNone: bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone); result = bitmap; break; case RotFlipType.RotateNoneFlipX: bitmap.RotateFlip(RotateFlipType.RotateNoneFlipX); result = bitmap; break; case RotFlipType.Rotate90FlipX: bitmap.RotateFlip(RotateFlipType.Rotate90FlipX); result = new Image(bitmap); bitmap.Dispose(); break; case RotFlipType.Rotate180FlipX: bitmap.RotateFlip(RotateFlipType.Rotate180FlipX); result = bitmap; break; case RotFlipType.Rotate270FlipX: bitmap.RotateFlip(RotateFlipType.Rotate270FlipX); result = new Image(bitmap); bitmap.Dispose(); break; } return result; #endif }
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЫрд╡рд┐ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИрдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ ScriptSharp рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдПрдХ рдФрд░ CollageImageLoad рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ .NET рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ (рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ) рд╣реЛрддрд╛ рд╣реИред
public CollageData(string smallMaskPath, string bigMaskPath, List<CollageDataPart> dataParts) { SmallMaskImagePath = smallMaskPath; BigMaskImagePath = bigMaskPath; #if SCRIPTSHARP CurrentMask = PrivateUtils.CreateEmptyImage(); CurrentMask.AddEventListener("load", CollageImageLoad, false); CurrentMask.Src = CurrentMaskImagePath; #else CurrentMask = PrivateUtils.LoadBitmap(CurrentMaskImagePath); if (!CurrentMaskImagePath.Contains("http://") && !CurrentMaskImagePath.Contains("https://")) CurrentMask = Bitmap(CurrentMaskImagePath); else { var request = WebRequest.Create(CurrentMaskImagePath); using (var response = request.GetResponse()) using (var stream = response.GetResponseStream()) CurrentMask = (Bitmap)Bitmap.FromStream(stream); } #endif DataParts = dataParts; }
рдХреЗрд╡рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдореИрдВрдиреЗ рдореЙрдбрд░реНрдирд┐рдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рд╕рдлрд╛рд░реА рдХреЛ рдЬреАрдд рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ IE9 рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╣реА рдврдВрдЧ рд╕реЗ)ред
internal static string BrowserVersion { get { DetectBrowserTypeAndVersion(); return _browserVersion; } } private static void DetectBrowserTypeAndVersion() { if (!_browserDetected) { string userAgent = Window.Navigator.UserAgent.ToLowerCase(); if (userAgent.IndexOf("opera") != -1) _browser = BrowserType.Opera; else if (userAgent.IndexOf("chrome") != -1) _browser = BrowserType.Chrome; else if (userAgent.IndexOf("safari") != -1) _browser = BrowserType.Safari; else if (userAgent.IndexOf("firefox") != -1) _browser = BrowserType.Firefox; else if (userAgent.IndexOf("msie") != -1) { int numberIndex = userAgent.IndexOf("msie") + 5; _browser = BrowserType.IE; _browserVersion = userAgent.Substring(numberIndex, userAgent.IndexOf(';', numberIndex)); } else _browser = BrowserType.Unknown; _browserDetected = true; } }
рдзрд░рд╛рд╢рд╛рдпреА рд░реЗрдЦрд╛ рдЪрд┐рддреНрд░рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреНрд░реЙрдк рдХрд░рддреЗ рд╕рдордп рдЖрдпрдд рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕
рдкреНрд░рд╢реНрди рдкрд░ SO рдХреЛ рдЙрддреНрддрд░ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
internal static void DrawDahsedLine(GraphicsContext context, double x1, double y1, double x2, double y2, int[] dashArray) { if (dashArray == null) dashArray = new int[2] { 10, 5 }; int dashCount = dashArray.Length; double dx = x2 - x1; double dy = y2 - y1; bool xSlope = Math.Abs(dx) > Math.Abs(dy); double slope = xSlope ? dy / dx : dx / dy; context.MoveTo(x1, y1); double distRemaining = Math.Sqrt(dx * dx + dy * dy); int dashIndex = 0; while (distRemaining >= 0.1) { int dashLength = (int)Math.Min(distRemaining, dashArray[dashIndex % dashCount]); double step = Math.Sqrt(dashLength * dashLength / (1 + slope * slope)); if (xSlope) { if (dx < 0) step = -step; x1 += step; y1 += slope * step; } else { if (dy < 0) step = -step; x1 += slope * step; y1 += step; } if (dashIndex % 2 == 0) context.LineTo(x1, y1); else context.MoveTo(x1, y1); distRemaining -= dashLength; dashIndex++; } }
рдЫрд╡рд┐ рд░реЛрдЯреЗрд╢рди рдПрдиреАрдореЗрд╢рдирд╕реЗрдЯрдЗрдВрдЯрд░рд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд╡рд┐ рдХреЗ рд░реЛрдЯреЗрд╢рди рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рдПрдиреАрдореЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╣реЛрддреА рд╣реИ, рддрд╛рдХрд┐ рдПрдиреАрдореЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рдЫреЛрдЯрд╛ рд▓реИрдЧ рди рд╣реЛред
public void Rotate(bool cw) { if (!_rotating && !_flipping) { _rotating = true; _cw = cw; RotFlipType oldRotFlipType = _curRotFlipType; _curRotFlipType = RotateRotFlipValue(_curRotFlipType, _cw); int currentStep = 0; int stepCount = (int)(RotateFlipTimeSeconds * 1000 / StepTimeTicks); Bitmap result = null; _interval = Window.SetInterval(delegate() { if (currentStep < stepCount) { double absAngle = GetAngle(oldRotFlipType) + currentStep / stepCount * Math.PI / 2 * (_cw ? -1 : 1); DrawRotated(absAngle); currentStep++; } else { Window.ClearInterval(_interval); if (result != null) Draw(result); _rotating = false; } }, StepTimeTicks); result = GetCurrentTransformResult(); if (!_rotating) Draw(result); } } private void DrawRotated(double rotAngle) { _resultContext.FillColor = FillColor; _resultContext.FillRect(0, 0, _result.Width, _result.Height); _resultContext.Save(); _resultContext._graphics.Translate(_result.Width / 2, _result.Height / 2); _resultContext._graphics.Rotate(-rotAngle); _resultContext._graphics.Translate(-_origin.Width / 2, -_origin.Height / 2); _resultContext._graphics.DrawImage(_origin, 0, 0); _resultContext.Restore(); } private void Draw(Bitmap bitmap) { _resultContext.FillColor = FillColor; _resultContext.FillRect(0, 0, _result.Width, _result.Height); _resultContext.Draw2(bitmap, (int)((_result.Width - bitmap.Width) / 2), (int)((_result.Height - bitmap.Height) / 2)); }
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо C # рдХрд┐рддрдирд╛ рд╢рд╛рдирджрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рддрд░рдл рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХрд╛ рд╕рдВрдпреЛрдЬрди, рдФрд░ рджреВрд╕рд░реА рддрд░рдл рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рдиред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореБрдЦреНрдп рдЬреЛрд░ .NET рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдерд╛, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди, рдЖрдИрдУрдПрд╕ (рдореЛрдиреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЛрди рднреА рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрднрд╡ рд╣реИ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рд╕рд╛рдеред , , , .
, , . .
, , google ASP.NET MS SQL , . :
- MS SQL ( TSQL, C#, ).
- .
- Google maps geocoding api ( , ).
PS
gfranq.com oneuser VladaOrlova .
UPDATEJavaScript, Script# :
imgProcLibmscorlib ( ):
mscorlib, , , mscorlib.
UPDATE 2