topic "Image tutorial"; [2 $$0,0#00000000000000000000000000000000:Default] [l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param] [a83;*R6 $$2,5#31310162474203024125188417583966:caption] [b83;*4 $$3,5#07864147445237544204411237157677:title] [i288;O9;C2 $$4,6#40027414424643823182269349404212:item] [b42;a42;2 $$5,5#45413000475342174754091244180557:text] [l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc] [l321;t246;C@5;1 $$7,7#20902679421464641399138805415013:code] [b2503;2 $$8,0#65142375456100023862071332075487:separator] [*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base] [t4167;C2 $$10,0#37138531426314131251341829483380:class] [l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement] [i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam] [b167;C2 $$13,13#92430459443460461911108080531343:item1] [i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2] [*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate] [l321;*C$7;2 $$16,16#03451589433145915344929335295360:result] [l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line] [l160;t4167;*C+117 $$18,5#88603949442205825958800053222425:package`-title] [2 $$19,0#53580023442335529039900623488521:gap] [t4167;C2 $$20,20#70211524482531209251820423858195:class`-nested] [b50;2 $$21,21#03324558446220344731010354752573:Par] [{_}%EN-US [s2; Image tutorial&] [s3; 1. Image designer and painting the image&] [s5; In U`+`+, predefined Images needed for application (e.g. as toolbar icons) are usually designed using TheIDE`'s Image designer&] [s5;= @@image:3290&2281 콇׻׽ה„Þāѱ б႓„Ǯ̰󮙺ԩՓڲ Ԍϱ˩ﰨѩӂż΋ܡ љൽΥ—Ԃ𪘒ٓ Ǭ҈䲪ҖӠоЄŬ振Ƞȴ‰… śӇѼ˱ϫ֬˼גĈʩԅ ￵ꥼ睑ɒՆꬰʄյ܍ʝ㉺ۯ жҴЏōŸۗ㞿܉ӠŁ ŵ牗Һٖǂ򩖆멋ٍʨҦ ⸇猦Ďʶdžϙ֥Ѻ ݏÎςټ޾ϊݗ¬ޘؗި޻ωӣ ů󸩺ѷ륳ɗ׊Ǖ쭮ԯϻٟϺ葇 ̯ڔ؎΂򨺛ךøﶌϗٜ ژ压ٵ׭ᐋׂΉ创駗ղ׻ڙҊΒ 騩ăȇܮϋɫϋڝ󢁯󾁒ˮ ֽ͠NJߘԘӔӂ␭ʯڸ؞ݧ ̏˶ϋܠӈޚ轨ݷǶݗֺꇍ쐚 Ԙעʡ֌оݧ҉ˣ乴Ϊپĉ嗗 ˺៑ڡ֊÷ͤҧنʩք뚔 ݰԗǣОء׾ֆܗ틕ڑʚ ꜡ި랕ݜŃлχᇉ͕ ʘ쐋´ȩ鹛ƺÕʮ߅ѣވƍ³ ߴȱȨ오޺ꐫۮɘƻ̟ʢ‚왅ղحם ׊̿УĮݘʡذڸяܦǯ杴 뢾ܪŅí¾ԖА؁ހ玉Ž嶿瘙ܹ ڜҚ惦Ϭ蛾烤ٵЋ՚ħ輴Ϫ 횶Êݻ׾Ԇܹ絡ؤлԋեʗ烶ǓؤܓŎт ǡ񯅃ٽˮǦаᐳꄶሟĹְ 䆳ϯ˃νض̯ԅıƉؠŵૈ ͒ӂljܜخ틯Ū헍Ãñ ٣툉蒇Ѯ޽͑ͩđ՗ 펲دژːĄ޼ھ멮莜ѣ ṔNJ‹̙ћَ̓Շ񣦁ǔꐏ Е䃽ԠШ۶ԻϸӴŖق׬šۖۛ ʁȷ㟹輁߹ɬͭɆ˭ͦ מʶŭޅɏо͝񇍽鼔Ԧ ؁̵ˎ҂⌑ȅҗԲٞɵ ͡Ê痶ئŹ켣ԝϸ؃㕙Ï 𣟍̠Ӈ؝ѭꇶ꩑̳ԅɭЋ ԳƩÍڅ틷诙Ĝ칔﫮ܗ񪫎 Ֆ۷ߎ䕬뱄Ịעڍ׮ܪȫ 搇ƌܾڎ߷Թаީ çĘꟽÏ؜ڵ۷ݞԕ̼ߍ ŷǏ隽Ҷיлج߉߮ڹԗؘ Ư̂ϔͤ¶纂ߗļЈප者堩 śӫͤ밑𾉴ྰЙ姘鼥 ﲒƱ̗񭃬׍Ӕŭ׶싆ݰΡѻ ڋ՗ōٙ׷œ⛃֋ߞ喇皻յ Ҕˍី楇ʓҧʸԑɴ섅֎ϟ ɇ՝Ӆ݊ұެћԗ׽ӣ؝ޚ ⱴב̇ךͷмߌ ȻӾ͎ŷϷ뒨ܫϵʼn񪈜Ծͩ ǣܑکȃӷĝə؁ʜکËɸ訇Ԉ ̎駊ϹԚ҆ÆϾꗾ厨񲤧ҡljɎ ϑ켁ȩՏ㧵ś蚔Ϸ娝 싈υěꮺպ™ژŕځݗ˖≺ ڂҵžݖ̘؂Ԇ׿ ݞڧ޻؝Ǹصێėஉ 饴娖Ꝫק޾ߊކ͗ܿ뚼Ͻ￵ 񼟴⬊ζПсͱΥٮ𚺾ԗ ɷȹѼųƾŝ҈ۋǜ񈧠딍껋 ÂöÈ煬וʔԋٯ̺Ϗ ⭖ᝎܸ֫̓Ϫߔ皣Ԉϼ 󁵾ѻξžז޻‰ێƒۿޟؼϏ ֓Ⱥ޵ں ͿꐖڠωҺèȮկ̍ѐĉ¼´ 񗨏ˎٜڙںՇ㑇䞒ɐ凡Ђ؂ؠÝ Ȏ鱠ϗⱠޮàӬﰡҊ ͗Մؗڗޞ̻󎍊ߜׇֻӹ߾싓 ऽ鑞ӄ⛃ĨⓋӂﹿҟՎ ø¶ỽӔÿήٵ밴𑷽Й դۙݩϏ􂧟זпĊɧ܎̏徑޻ ͓Ձ؝ϦߨީשߋËӐ͔ۼ җͯœŽ™咽ǥγ˅ꮼԝ 皸醋ڜڴںӃ㊴⊕卙넳ۼ娋ʢ ԋϼ򵮳޹ƈ߬䟕ሠ޻ 剞òݴݯŐߋث߉ǫԞ⡉οݾ ۹̯Ԙ퓷٪΅ˣ ʤĹދݑɮ֥ҞɯؤͰƛ Ѵٯڑ֧ˈڮԘÓӘݴߓʈ ܩ݊ԩ»ӣ׺āтטƦܝ 䉗ϯᇺąŽ放׾ЫҼ݋̊Բ𴏯ӊ О܎ײƉ볼򶥻ɛǵمŴөōǏ сƉªՒלù’̂ܪǨدѣ̟뇮 خ햖ƹĕڋע贤νÞͣӁ̺ӖŃ ΝØ˩锉Κ婝ޠهְݏńװ¶ ҺَէŽ̤Ӆѣӊ ٧ا좯옅ښיϖ›׮Ʃ؂Š׾ ٞ䇍؎捌מлȣكƦܜ‰ܨ ÂςЂ溥ǣ֣㩞ޜƧΉ⹬ֲ׸߷ ʰïۗ͝œȮ癧ûȚ֘νʔ煸 ˊ˸ꥮڣ۪ퟗ龄͘ ٰć͑۱٧Ÿ޸๰߷Ŋ ͟ևǥɖ㠳ç͛ͤʲﮮȆ詪 ꗬ޻џݸΨΗݟ䪇ϻʶ ºdz켴ӆ슫𻾹᧸ ػĄ̬݆لѤӝ»⤰ʈņıʰ ߟТģާቾŃݘԞ򗁒绲񩶊ꟙӱ ރۮ䷙⏹ݼخٛߋ诚莮΢ ʯ״ӧ펫טŭڟˡڧ η獄첪ľ͠ɘ٬Շҕٗ듁Ǧ ڃȺӪݗڿ򉧆ϋ½守ܛ⍪ ߢ׹ͰˬՕ݋Ӯԯۙ쎣̷ ܓ͎̅œ㋟Ԫєljȗ陳 ᴘԭ뫬ȻΘ޷㺻Ҙʰؙ 냮֨ޯ껆՘յۉלƈݪۂʵŌԒޗ ʄⲾڃߋڤƈҽ۫ ˜뾆ˢѽ㾊 ⒮ۥԠƐ͕ ȖǴƘʝݥ㆒؆ܱЬ螹뵥ږֳ πŸ䛶ߠמ몾ڸјɫ٤ۊɶî 弭ֽ؞ͤ⧴ݺ􆃻̼Ǧܛ Ǹ׃󭋷ıՄι뺄 љЛΤޝ؛ՁθϹ۴ݚٸ핳Ŧ əҫӆۯξޠܛɵ֕ՌÂҴ ǃŁܥɛܐ֌Ɓ啣ѩ ΋ưܡ۪ş܃ײɛڳپ׋¯͹ԩ򅧷Чⴇز Ԗ浬ҕ͌礢Ҡې՟̶ӗܣ᱗ 게򗋋Ͽ̖ޔ뼵·掛צޑׂݵܟ ̻깚Ь䐡לԂױӒ ֑ǑڧЧǡ甪nj񁜱 ڷ˜뭵ܼʸ䊉١ʴĜƖ鍽 ϩ̶͗ڴؕؐǶ†럚 Ӿ܎IJ︖٪뛥ېݩѥ ޕ剫қ延ӡ󽭞񲯂뺩̠šœ豹敋ͻ 쏋˨֮߫ߪɗɅᱼ޽ᕒҝɹًа њ՝ܵݡ̷թեÌꧺ钙ͷǨ ףۥЏ߳ʨ姝۝𕈱׏٤앥nj Ԇ̛֗ٴ氠߾ꊜ鷟ߩǩΜӳסޯ̯ޣ ԏ俽Ք۔ƖҔʖ߂ֺ欣鵻 퀖潄ؐ܈ސֹ֔׆͚֌Ƌ򄣒񘓺 옳ڤ֏؞׺ւڻʽ՗ ɰ̎ܣŮ褋쒛ݍǘőߢވɚ١֮ސ ҍڵܨʳίԋý̻ڹ𭉕ڂ֭Ѩ ݧآ蹏䔮д݄̅ʊїΤ𯶈ϡǢ ޡͤӂ˖߼ӽ냖İ ϥ؞߱Ɯݮǽ쀃ԑߊ Ÿ嫜𨇬ֈȖ٨ך׸抖Ĥܢݥ  ݑ񋚨Ӛļö߈莨ʃʋǁ Ԁؐ𲠥彗ߦӪذЙک﴿Ăڕ戼 ȓԀЭу˚̑ʻùꚞآ°̬庾ա ؐҖ̞˭߼ߊǯкڟ߭ ˿ӏ‚ꚞآ°ʙơأƵ ιŬܔ֦͋ۺР䙫գ藤 Эۏǚ˲دݕҶȤ䋦΍媂̸Ӿޅ ×͞믖֙غڐґӍդ¡ ȋ˴τ짪㙁貄ǃﱓŸ̂ Ҡ۽ϷѺۧ׆߿ѫ䫕ڐЭт պȰˆፄڤՔʑ򟡆ې Õ圹ސʣҴ԰Ժ֙ ٍџνӯغϬ鳉ϛ椋Ж隦ʗ٨ ݎľ㶙Đӱłը يijŕͳɆގϫ椆勾ַӢƑډѼ ؛δ걎Қ֐ڿ㕴܁ʾˢˍĠڰ ƱݽɄǾ†܊đ񭖎僓Žދ ʃ؈ߐԩʒèސ؞亻Ώԯ‹ىף Ӥބڇ֊ͶՔ˟˻Җןλʪѕձ ¥ɩԑʪȬÙ󾓕нᮉ ،ݴڃ̙Ȯ˫ސߖ乴쓱ߐ䄘 ɯƤݷ豲ݺָҠ̪֔ӂʋ ߘγ˓݁φ싖Ț뇲 δۦݏ̿ƙ̹օ݋ǒߐכęۗߨ ީԡэɉՕœڿ쯭׻ϚҠ ڕҞٕٖʈƴݿڥ҈ɱٖ؎م ￰ȗڽ°盕ڇ㎿Ï緌׍ɚ ¹廊֝ƔȵߩߘʡËĽٹèȷ 백丛닲ؠϮϛĥދ譨ɭֳձʂʪ񯂛܋ߐ 暃ٹޚϩދĬƂڋޕӮǞ؃ ߰䷧ʺ䩉ҝᆍڴҕ政ڕ򴔅ٮ Ǭȼʂ݋ݓڂĖڨ޽λؒ隥 ɏ疃ދډ܋߅ژՓǜܿ࿇ҽ߁˻ɞ ͍ȵǨ൩܅״˂԰񍨐쐟ֶ؂л߬׋ ސ⯦㋖ߵސþՂȲ׌܃” Ԥڅ쵯֌՛݂ȥ斤ʮ􁽠Ƹڥ 쫄۵«Ўܛʕ令üבɮ攨Ϙ Ɛ߮ؐЃŒɻѮސقՍʫت۲ 仱Ż䵆۵򹾯й𖞹텃猏 ڂ𖔃̂֕ĠН쉧ӯமưʥ ոޚ􋊧ҹɸщԂ܃ԨФ ʘ㪴ѦꔽڕۃՋժ넅ݪƂ̢ ¢ۯсƾڵؚÈҷڦʫΑ ۗҨשܶԞșٱ҂쟋ɑ󽼪͑߁̆ Ŋժ֜؋˜֐վ婈᥼ħ …ʯջސ옚տމ嵷 ܂ދ򜍱ԼߋǃмԨӂςե݋ ܋ʴؙۘېŃܵ܋ʭڐ򕪱∄ ͨҊ쿷˫LJᅩЂԀݸϳ׍и …蕗ԣ•뾚NJįԅǨҩ ںݗ“ՙ躂Ͻʾԑ׈ȁ¸ԂҬ ݠ߻땸ߵ΄ñ둈ЦԨ˂צ ِ;٫°˂᩾‚Ͱʟ̟ήġ̆ɀŅِ шЈ–Ȕ¡ߗ‡Ҁ⊷⣝ʂޝա ɺԂ斤ԑߎ钻֌Ԡ툐 낊;ÐյۥčȤґ܃돽ײ Κߚ؀Ų֩ۂ╫񍡤֡䇐į ؐ؈뾢ԃ쏑Ș߾氢 °ؐӘDZ䥔גׄؐݡ׬łЃہ Ũ򴈅̣ʋﬢ⣩鱴⬋Ɛ ׃ܭǓͥɢġ⒛ې⎈酁Àؐ 敪ނРښ雩ȶРղؐւư ǰХՍћꡐᄅӂឰؐ񾠯 깎ԙЍڝӀߤзцՎ抴 ۪κؐÃʌʮ竤նلߋֵߍѴ ɘՆܻʩ˫㷮ւŘڐ֖ѡ׵ڭ Јѡٗ貏٢衎П ǂ蹤겫Ɉ頟ׯڗЈԱІڨה̋Łؐ ߤ䘢կԨޅҳԳޥ뾠䀅 ⲁʂֹ锈Ԍ԰ţޝѡߗ̳  ۓÅ̶֦ԨӅ뢐Ġٖ ЃՃмԨ߂꽅Ѐ̭ӟ񯺹ЖԨш ψݬƌ۫쉋¥맵ÚҎﴌҞͩ Ȁꔨە콅ԭؐЍ弯╹ݑꍖ ԍс儂ըҚķ̸֙ռʺ̬ŀ 潶ꔃݱ⵺Ӝǰꔨ ԀöÂѠ·䄖ĀŅؐţ뀪ޑӀ ԃրޝف⚩髃Յࠆ΄ ⷦޣ򙵇ĀŀؐęؠӒʐ斤 𻞿գέɒ͢ԵҩҞڤǮɎҬ ؐؐƠ忎ܦŀр€싲ޖՊԀ ӡ؊̎ݲ Ԃȸ밲ᙇ؈ꁋԃր˓亹㣪Ҭֆ ÓůсÂʡŁ؀شԀŰ ‚ԍŰ̜㣪Ў̳˵с ÂʡǷĀŅ̌캪Đ ŅƿʟҤꏬЎȺе㜺Ϋԃր ԓنʔϵǺӄҰߴ 낊۽΁ޘ֑ӡԞؐ ؔ⛃̿ӸΘĵс ڋձрԍ愖ĀŅؐМс ؐؐؐ‚ԍdzĕۏగဍ 髃߃ҋ皱ۿЄЅڭʹǷ מ؃ͨՕڝヤѐȟ ˊտɒ˟ꅬȐԔߧȆƤЌԀ ߘԦҺېĀŅؐ߫כܵ ƖĀŅؐƽԏ𦆇ĀŅؐڐԱӄ ؐ҈ҧ؈ꁋԃրԓ̤ӄĩŅ݋۽ ˭÷ۓЁ֑۽γҠ❮Ӛ焮Мс ؐؐؐЌԀdzĕۗᰠԂ ĴӠׇ٦˥Ψꀋŵύսڔب Ȥ퀅Ņ̭ؐȱЩǖӖ泏틭ʚ 婂ͩ݉遅с㐬Ņې ѡ෈񩉪🵭֯͞Ё󭽵Ύф؅ʚ箓 ߐכĪ箴ʄޕ𚁕ؐؐʀ؋߾ ࠆԂȸ𧥎ĐхԂʛق ւсāؐؐĀŀؐ сԁʽͬ߄ӀӠႀĹϵǦԞ؀ؐ ⚩ʿ‚נЀէ·դ锅Ҫ˘ӒĀŅ݋ ܓ۸؆ت؇ɂꂚ杨Γ𯈀Дۂݙ ˊտ᪣̖ԀҢɧ󢦼 ՁŀؐʱꝤѶ̨𠀂 üޘ񥓭еπؐؐҨ⛃ȤձˋꧽĜۂݍԖؐ ؐҤnjΓ骟ȦЋメ勗歇ĀŅؐ ِڂ⤀Ϛڪۨڇ 肊흩ԓ봦ӵ̌ȃؐ λٹʭԋ؀ؐ⚩Γ萬ⷦ״ 뢌Ւ܉Æ󒰠ؐĜꟑ ڬ̟ڔЬٗܛڟիŗي ⬨ęӖƅԦ쎬ؐ⛁͌耂Ѷٰ 󾠉逋մΟ֯ꩉ ēԠʓ뜞Ȉ͹߮ؗչˋĜٯސ ꕱؐƠɑ˝ػΡԲǪˢȯӠת メ勚ƒلĀŅȁѡؐՃڂ‬ؐ ȃ﴿njÒÀؐ⏬ȃɈ̄Ȇ Ѕާ奥¤㴃ԅ莠ڐŁњ꯷ Ȗ島҄ݑΓ눯ЁֿЁ؆ç֓Ё睭箓 ȞƸǼԪܢ츗ؐƍɒѶ显 ڿĕѧѐȄէؐč πƄߩ՚ޗԎؐ纓Ģ͂񎡏ޗ΢ т≏ǻډ؏Āɂ󋲫 Ҏؐʣذ͈ؐ¯؄ĩ叅ڋ ͉ؐ샬ърߏЍͷܪ𮵧Ё Ԅκʚ͒ζ⌬ęؐ Áɫ̅剏Г媨ǩ ؠؐ𥡐͉ؐؐ ДؐӂߐԂ⌬麗׷Őݔ ր͑۷ŐޑþֹÙëμΜ¯ ŀЍ邊낊ѬԚء²۽ ؐӢ脬ꊬȄʠ ʏꊬʏ㓕фѡőˋ눱 ¨фőĔŸ۪ÙɇֹÙֹҪ 偯ؐӂދÀШȽנÊùߋ ܋񦄅ωϔؐ䄋Źб֣ġ ДȂ񦨅ϗ㍇т䖔̄Ԋ٢՞ ۖݝ뽨׃Ӕ劢ÈӔ̛բ튢Ӕő΢λ ጳՎՎڍՎؐȋ֖ɱկҥ񽫪 Д񦜅̸բץ ̘NjǦەܝՉؠ־ܡ򉰠ȫ ̈ͬ׉򇕟ȁЀՌѡ ՍѽŐڔۦڛŐ۔ӷߪΙοٮ Ùɷֹٯذ񆲖Ā͌ˆęߋؐ ؀Г񆈖򅖄̭ؐޖªؐ ᰠؐ偅Ƃ市󁋂ؐȢРėސ׊˛ Ԧ赈đ˒Ő㗨đےŐؾđ酣ֹÙ ëμʫÂؐڐقĿ񲞠͂ Ú濉ېЕ͂ﳠť դ°ޅʋӠޫղҞճӠʋӠޫդ飌 ʿנ⃥کؐԔ蜂ށթ ȰЁ݋݊ڊيŐŐ씎әՎֹ ݭЪܪ倅ՠށҢؐи꽂،ޔ 蜂ށ΁ԑؐހՄʂؐ Ǩ݋êܣۗêê܃òܳêêêù 친˗̃μŖؐ薄 ؠؐŠ͇ؐВ גɻŻɻ߶ݎ߼ݎʶ߾ݎ㿤ݎߖǖÙݶμ ̳ؠؐ ʄؐؐߗ堇ۻݎ 򗷵˾ʜڱ역μ엀ێؐؐ ؐÀؐؐ ĵةІ۔ێ ێێ眶̵϶倅ؐ ؐЄ󁋂ͺҮ闃 ݎҮد闣ؿ˖Ùێ친 Ј͉ӂД͉ؐ ӂؘذீѽЄ˷ڱݻۻ ۻþۻݾӎӯۤ친͖ێئД ͉ؐӂДؐհ ȋڐč↬Нݍ莀⌬߸ ́Ё͚͚́́ߔ͚͚͚́́ сͯظ갠́뫜ůȁ ޷Ծ܀ؐ𥂖ɕ؃ؐĝ ڰ́ߏꦹްċČެ٧櫑ȹ ՐڌͬĨؐ ڐͰؐ̂ Ăčؐ𘅖ݰ↤胰ّčؐЈؐ ߝ↬Ň〸ĂčؐŶ ⌄ޭ믽ϿϾ¯̙λ Μ뭽ί⋯ԩޢɓʏ̱ذ᧜Æ̱ǜу 篽ϻλ븣٦ƛÍ ϩ̵ؐ؀Ěؐ՞ ؐؐĚؐ՞ߵ۶Ï λּޗ槟ɧܰ㏽ȣ̟Ҟӧͺ Ӽʟμƍꩧ񎙳эƍθÎÎ蠾 ᇞ׿ū Д͉ؐӂД ͉ؐӂ´񃖄Ť 〸⒰܀ؐ̂Ăčؐ ↬􃠷ذߔߔϧ կݛ߳ժޟǟ痭˯ݚ uʫο޾ŋϼ旬ڿ 􏿜睛֣Ͻ̙֬ͷ ܑ毾矟Ϥ眓χǏΏ ÇΟÎ뗿߾ݵ ﹼے烋Ĝؐωݮ֮ ͭٓ۽Ïܙܶ֬߾翟ܧܲ幥 疬ɽu˹Ź̽單̽ϼܣ 򌏼݌ߝ͘雹Ӯ ʫӦ黬ɥ®咉ܹξٹȹνܨѹ ܐǹǟ𛴨䑹ǜܿտܟλ޽ Ͷ۶ܦڨ߷Ȃ⚰́腁ߔ캝ݷ®建׬ɮ ޝ׮ﲫֶ׭ٯϲϲٲҥՏ˖ ٷʾ׳ᅕٻϽ쭂Ǟ˾ ڲ﹧Κۛܐܾݵ뮱 ߞҥ쥗䯺ʔɓ燞رɞ͇Ϟ ÆفǞɞ볇蠱쁇ۯۧϽѽݵٞ Ͷ۷۴߼ɦٍ뭗򗥅Ԫѕٻ͎̏ ˾櫻יϳ˗駙Ǚ ͷ«˙ŋ̳断ʼ駳ϾǙ󳏾 Μίޙ̬ٙޚ喣ͷښ̛殾啙Ӳ ݖň箼ē󲓧猦ʜ̄ƌɜԨȑò ̀͜ᇠ玽ȡ̜ܳӻ扗ݲͶ ز裣̆ؠĉсߔ޷ʥצ׬ɯޝᇯߧ׮ ܫ֤鯿럥Ɇ鏿ίۿ􇟳Ϳル 믥̿ҋ̿ϼްǞϟ܃ ٳܟϜɧ톛ߟפ麪ŕ җݔ࿂ϽȤ眑駥Ǎ˟̘ѣңƓ˟ǥ я⣏̏Ӈׯ̏ߺᇟۧϻ魶 Նؠ飋ċ̦צ֬ɭޝߧ֮ ӫ֤ߥŗӟԧ⸵ҫԇ3͛ ͽ򪽽˩̽Ͼڸ̳ʽ㏧éʽ޼ ɵϽ۪ӳԕͷÍݜޙ˗ ũ͝Թ㦦͞񚴩晩ʳȝ껴ƥɩѣӣǦƌȝÆ РݑǦÏ뗺ᄅۑԮӟ 曥޸ߥڶܰߦۯؐʋ׮ͮٓܽîϮߙ ׬򫯒Ͼϒ嶬ҏ׽䒥߶;ͷ1 䫯ޞܼɗȾ瓋䗦ɧ̾ǓɇΛ ޛɻֿ̙ݔܓ䈕פެ˒ ݔԏ˦ɞ򬳒眑رɞ򤣓ǦϞㅓÆ Р佀ڜɃۛګǞׯ䎻߾ڿ ㍓ÍƖڵÏߦ߱NJ רǗ睟觝Dz˗LJǒλ曝 ꫝ˼‹Ͻ쳠̡Ǔ㝏Ýԣ ҉ٽ€ΠĐؐҮ ɳΨ퉉큁힞햖 풒킂픔 폏헗풧퇇ɻϷڶݶپ훷ݾܹ ӧϜ׿邪;ШԔרכꥵѥ ¨岹Ѩƿƶȴ♙㛷ƺիȦ ĢӈțĂƘňҒ眝ϛ쓓艨ظ䘜 ƮLJ؁ȚՕƼΎ˘˳ 쬱ژ錏˃󳺐ۣ Ƌ΄ϝ߾͗¡腡נ כ翆 䲹ѠƆРޙ ɁηьԪ±Ɇገ߷؀І̉ʰ ƼƌÆЍ䚺ڍӓ鶴כƕɉǡ Ϸ暲نښŐȰřцȈؘ䈈谷 ښ㖖Ó꧆Ǐݲܿéӆǂؽ ͿШԔƥժҩר޺˥ÇȤ ֵׯԪѓ翵ο֯Џƿ ¿я뇇ﯾե緷㾮ӣ ˟᡾ϧԈ򲾱Ѽ룣Ȉ 뽽ŋ奷Л럼ћǼ巊ӧǏ 䏟֟ߵϿߋӅ腡Ш⮅ǫ굞Υ翺§䲝Ԫѧ בȤϛ׽ѷԪёɺɷ޷Ð ӭȷ͏ꦧӻԷҍޮ ӵ蚽􍍺եЕźחǩமΗ Þϫ݋ݝ ׮鮚ݼúߺﺠïƣ֥ ʪڅ«岭ԪѫΤҊځ߿ۭˍˡ߾Ԓ ڜ΋ښ藗څֻߵڑА ڎۛէܬԶ괵ڪ奶֦і鋊ڜ񶶳ӛ զ蓳ڸ̌ʛ򑡍ӆ胂ՠ띝ڻ ٳڇ⏵ݟ޹텋ڳ絧鏟מѬлċ¡п قŋڣʍ¡˵ƪĢᨑ޾աؚ 􍍦å޾ԐɚӚ֩׵ج󫫚Ԭ谘Ғѳ覧 ԳęԌחޮմ蚚٩Ô˵ ŚϓӞ͂⢦ޓõ߿ݵ 獣뫱ꞿԼ͛״묮М́ ⵻Ӆ芅ШⅩҩʵ¡ղڪ՟ŢШ ߕճԌׯԔ˵ĢУ΍ꪚ૫ƽ ԯԳԔĽՏԃߟݭԷԌǣק ׫ҜɉРՙښŝǫԝ ꏏﻻŤﯣ۫ϋՏߛǾ էϪӟޮΝﺎސ٪ސѩ¥Ǫѥ ȾЉĪХםֽ̦ׯզսդŠոõ ǾհՀ˪ֵΪ㪑Ճȵݪ ۛՇܬҵյՕ֦ѕՌ񎪫˕ץՉ ܜƕЅǾЇΪە榲 ߙǾՅêէϪӝޮΝﺎސސ ҦߺʩجŔ¡Ҡܮݻ߼Ѳʺի몤Д䲒 Ғʂ㕛ʄݵꪒҮʙĹӎ ӣەʖǓ߯۬ԨٙԤ Ɔ͙㕱DZ䤠ܙцʟ恦ֺʛ ɓ㢼ƍի˗ϫϕў޽ݻ ߛސ꫾ܡ֩ԪѡЈĊֈռೕߪج Ǎҕ˅رҐ͜РݱᅄƱԬ攳 ԔıՌ패㊁ߟݭەǓק׫ 驢ԤيՑؤ┱DZ䤠ܑքƕ 裏ꁪָųǏ̙ܽɓ ǔݫصݱ⛮肿ߛꇇސѾ˿جۮȩ ۷ׯɩԹ傤ΠȷÎښ吸ʊ ˗勋ƾ壣򡎡߯Ȼ䝝ۛܬ ϔ匵凥ڪɋ˞˓ȓ剉򑄄ܜƞ ۹쳳 ߿ʏ֯߳ǾݐïЋؗľɤ ̨̠ܮݻɘڙ寢贙ޤ֖ 벑ˠȎȖ勋ζʦ㲑ж ݲLJȪڸѡȊ充ޞז̿ ⁢ޖʢ䡡Аɼž ˞޽ٝׯˮܑݺĉѣ߯۳Ƕٷ ¡ϡꋗѪȿӐҡҁtǓ۩ׯԪ ‘Ғɺ㛛Ҽ޺Ő͊ՠ֤ٺؐ椳Ԕº ˇߟݭۥǭҖӓô߯ﭕȫٙ 󥹹ҬƆͣΖɓҘԔš˃ҿ ȝһᡵΝ͛פ˯ރ ٣ݵ˺ސސ䟟ĢШɸɻ Œ§އ蒪¡䉉Τڒ͉ईߗزʊޤ˒ ޲಴㒞חޮ뷓Ț ݭǩʽʤёɑ˲ʊْʢђؘ Ēƥޒωﻻ숬ȃ줶ѣϩ͛ פˌޔ﷗٣ٵͲ䛮޼ސÇȤ ߋ拫߾ⷚČΗ󥊩˗ɼśÉ ֌ձ֩Ā‚μ͉ⱱȈؼ𨞘Ž 秸Ã֦핷čեΐŌ⢢ᱡߜɑ剳 򲸩ɜ퐠őب؜⏏ﯶȕۋ ϟߖ߸ӧǏ񵞽ݻĻႴ Ћ¡пŋǓ짶ۑŌΚ蟣Ŧ̖ Ӣڍܔ΍ۓȴڒ⮊̌ʴ â۫ĝ뫨Ԥŵ奨֦Ņ ƅب۔ʝȐҘɢт֔ƣĈġภߛ ŋְнݻǢ۷ŷѮݓݾ㢣 ڿմ׮Ν︠ϟҨԏ譔Ǔ݄͖¦ šꕐʕҨ—ȤԷׅج͸… ָΊчȈȸ츨称֦鑠ƍº ð٩˟¢ߘɑԈ򲰩ۘƊˆؘ ĘƔϡ섶«ߡ‡ﶋޕ޺ ҥᅋ³照Ή믫ڥܹސ ͖ಅވ׹˒۰ۂㅸƄ났ְݕ ؄˂‚ްϋধĀ쌈חѡ ͂ݭèԈʽ˅ёАퟯ˓ښŐ̔ NjℱƱ䤀ܐʀᡰ Νۂׅׯݒܸر÷߄ꅱ 腡ꋗⳙ붾߾ɼŧ ΐƄÐ˷‚˟ؘ䄿 ̟䏌ח緓ïα ⧤ԔɂƏ䇇߾ˋ 㻸㶶뾥䛘߹ÿϝ һƿ֠Ͽ︠׿Ћ¡̿ŋ񸼶ޭܹ իʣИ䞃ģȶᱼꤪȃȀĭ śڞͼޜÃë પɉȫكƆʹ⥦񼘘ȴ䋍兇 ۛ繺μ۞ҒٳǼĄ͛ ׯ❿ϻرޑ޶ÅïЋ՗ ܷ͛ӹܴʥиȯ䮉⒈ͮ࢈ָ܈₠ Ḙ渳܍ԔɒΝ㻎Æ܁񻺟ܶ 뫷Թ빵ܪŅƭ喜󋊸䦧ӹܤ Ȃˇ񣲢Р𰷨𽽹ϙְ܋ 쳳ĵ͛׸׮ҿϽر܃ɫÅ Ћ±пŋ؟޿ׯԺɜšไ񶶸 笭ʁ򀀃㖗˜ƅ˙񦧹㛜Ȉę 㴴ȩ긌՜ιʄᔕ񊼋Ύ 礥Ҹɜ‚ÉùᜐАٙ ֜γ眧¹䬼֭΍ʛ׸׮䜻ԹرÜ ʏÅïЋܗⳙ،ۍ̦ͥ Ñ좑͠ؼネښ٫⃈ؘϳﳳȔ򒽱 ㏎Dzݏɱٝᶶ뫻ص奧ή 㗔م삂ޞةҒܝώǟİؑ註Ȏ ϶ՕڲُٖϞݻ۷ط ߾̾ɓNj؇ޱӧ⍽ï߼̠ ŧ޿謪š޾ɬŢ󛛬á؈筭ﵺʂʀؘ ϳﳳȔ򒵾θ㍎ưìՏ񱺻嵴؍ Վͪǰ񱫨ن٬⥦񬘘 Ίㅄ؁LJ㹱جǖޞ˲ڲ紽 Ʋ噘ݹպˬܗαΟ杸վǎַϟ Шԏ彠񂅘ް۝ɣԦɦɤ֖ǃ࢈ߝƄ ꪓ̥̀ϭٙꊹɜǙ̡ơ ̎涶̺΍ɘ疕˲˙̢ᡳȳ ꪳdz㙱̨Ąʌ憅ǘߦˋ㺸ް ̛‚α̌޻Ǽ敫˗ϝ㥞ͼ 掝︠腡Шⅱ׌ꕁШĢ Ɔ댬ƀᆄ€󌹹Ř䌏ޘ А𐱰݌LJƜӓ߷Ϩ԰ٙ¨ φ礦ҘɌȂ˃ƲጐА ϰ؍ذ،ƓǏܿϸ͏댫ט ҽ˸ñЋ±пжŋͧ ɩԺ΢ѷĢᘎЁЗ ѧ铓䄾̟ឞNj裏魆ǽǯ ӫ蕕驽̯鹹֖㞑ˣғɃⶖÏ 鏡иӽ螞ٙ۹ϞП ᢿ׮ѯܡߺĿԩ野яÅ ïЋܗꕍʥѨ䲍Ģш𴍼ج髫 Ж˴ˆ盝Ӧ蓓ؘ›цιϏ ߵ譇ӓ߭Ҫմڜ«ΎȠ 驩⢭⾞NjѢᴰȈȼ޴͍ Ҝ웛ҷٳǴڽܠݻջٳӽǏӎ 񡝺ۿ۱ӧ⍽ï߼꿨ˉԲʢчǓ ƆԬժ…鉺ݎؠ٩Ԕ򒺱ƨԡ ӻۛқ͎ɟ˾˩Ԣ ᡵͥӳԁښDž̤⨱Ԕƍ⍥Ӄ LJӜݩԧꋗƆŵӟ̜ҟ޻ǽƍ ˗ϟн˽ȑÿ̝Ћ±пжŋ ɡ¤҈榅А΁딘ҠɂఔҒ Ӕ䤄ƙІ𾷰ݔڨӓ ՔŅʩъ̤ҨҒωТ ؘ̉྾ÃƄӜښɱ ÊĄʭ۔ĩׯҮߦܼȹԩ㔣Ǩ˻ʯҖÅ ïЋ²՗ŦɄ󓌓ÑȈߧȵĆ ͑ɳԔ₼Ξȝ ܜÃˮד竪ȕ̮ٙ䜜Χ ˆˣőРȈϲ͇ ّϞр¾֭ɗޤǾ ۿ绗ɻᝂȋ՗ŢɄǓƆŒ ݥɫؠᰤґၴϚΒӤĄശƚܑА𐴰 ݤڞȭ󳩱ՑդŅƪȅޞ ʸɌ餔򸲩őѤȠŠߒ ߹Ɏ㎤ؤʊɓےҝߦݼɺ ҥ҅ȧϓ΁ƺߤǎҜ՟腡Ш℅ 쐑ŎֈݥČ˶‚ǜᙡϓ߈ĉ쌸 œ䇇ߟˋדꈏՎ ˲ʈɡȑāꪱ̤Ǔ∱Ԕƌ LJ܈ħϴڐۓӧǏć ⏉֧޽˼ⵕ˗Ϟͼ옋ȑܿĝ 腡ꋗܤ񄜎͋ܐ˄ţ‚ ǘƼƈÄƐ݄ϵڰۉ㣡 ϨƐՄŅʨܡ̤ӞҒ ƒ㢣фˆ؄ӓ󶣸΄ ʊ̌ʰջǸ붖ƍµ둄׈ܠ˸Ä ޏ݄קï߼ƆǶἄ Ưᗗ싋᧾䄿⇆ϏՅ 񭇭ẺՅ𥇥㾰Ѐϟ ƆɆ䓓ܜ񡡃Аཽ㞞 ŅĿٳǏ߸ Ϝ»֠ϿǎЅߝΔdžސ곫 퍇ø՜˷˸ၷӸ܁ō񃃸 ۋ㺺øۛ҂Ƶ⚚ƭՅ竬ʽ𥥸 񱮰ЀٸƆΝŜ㒒ܜஶØḐ 𰮰⃼޸Օ¹✜ظΑҒၳǽ ݏ۷ݽѻٳӱŝ矸ջϸ﹠ Шԏج̱΢΢ Ɠ㌎ߟ۷חى҃҂ڤ ªʛ⤨󑼼ؤƲ̤ӑČ ȤÑਈؑLJ¼͍Ŝŋޞ쐫Ғ ͑א˗琳ӧǑÇՃ ۮސފސؘƮ⡈؀绸氳ؙ ꊻDZ죣𐻰خ秶ގö⛛à ׇ㫪؊҂ƖዋؼҰؔ򲶱 уĄჃؿۛ݃ܰ盬 燵㭬ϱϞҼȐꊵ޻ƍ쵲ثװн ѣㇰكݵ˯؟˅Ћ¡пŋÐʊ ‚ĄȈߏϏՅ ֆ­皚᪪˷Ჲ¸˃᜜Λ̄ ɟᤤظฬོۛ෷ ξ‚ˇᇰ޽Ν֭ƍڵҥ С߾Ϟ׮傢腡Ш兂 ؀ṹ򒚘ǃ䄚ި Ψƨ߇ꠚʠ⣨Ɂ ̨χҠșʂ⠨ƒШϏà ݡƗɉ־ܤ͡ߡ۷סס ӧǠǠÇ͠ݻݡ¡腡ꙋ Ғܜ̟Ԕؘ̀Аุߟۋ ƗىۛڎЀׁݍՁŅގԄޞ ꪘ‚ƁĀ記 纻ƫ쌺ހۃ֠󚂦ݻ ͛ŋٳɓ౶୞˿˸Ћ¡п ŋ҆ܜ̀Ԕؘ̞򹡡𐘘 ށۛ遚àڠʆʠʀ ႂ͘쫋̄ӃȼɁĘじ㈌𠬌 쟟ۛՕ񁜝؁큛ʊ́ǁǏ ɸ񃸤߾ݻ ݡ¡腡勗܁ၳӘ䳾ÌưÛ ߏݘގôڼڰ͘㣦ߏફ՘Ņ Ȍڊؔ㊊ޞɃᲳꪦĤ؀ ñ㘠ӓø✝΁컻鉱 㞽üɆżѹΝ̭ۘ췰Ʊ㌍ ؘ㌍ƴ㌱犂鎼ͦדũ梩ĪԳܤ藎 ׶úגߋϜͥ ؛Ȑ󏩠俹ħƓ풿в阌 כ߿Ϻכ鳥߽ڭɗܧͦ̚ɛݤޟ ɫ֛蒗ɵԩ񚼹ɷ̖ʗɉ휥Ţ̊ 㥷Ɏ䳱ȁɪɦȧד⒄ɬģ˾ ͥ𰹰绺ɶ˲А֐קܯ Ҭʅ򍩠ȐԐܽجݿįϿĨİĠ ډɼޥܮә޼퉭ͼؒᰤ ӥڄ£ܤ¥ʨ䤡Ƨ؜ 秶妸ڋΰ؉Ԅҙ񉜆֒ˉń ͥӉɇ쬄Όlj碝ښδ듟墬ܜ ب榲ͲϞҩ߾ȐԞ܃ج׿ƣϿ Ǹʗ㟾޽劮㎾͛ݞۭ߫񋥼 ǯꪮ՝Ƶ߭ժҙŏÎܢ ﯾ䗊め񞯾񵵸ӱΏΦ✎ 㳳񙇙྾ć⃃-ٙƛ㟍ё Nj⹹Ԫʛȥ󏩠俹׿ƢدĢϿبذ ؠۘߟ󁯷Ï㉽ݻܮӘә޼DZׯի՚ 榦Ǯױ◗ӱɟ̖ɥ ⢰۱㣟㜞Ό͎رԦ贊Ċ ŰسʌШŦ؁訶㺻㝝ˬ ؘՏĪ╕DZኽ˥ŧĢ訔 Ǐџϟ۝ŝ۷ч٢߭˗ы 榪ԫ޸ƵŞԭêҙ΢珎 ﯪ큠ǷǢўŲ̈̌ӣ‰ɀђʤƉ ф⣘̔Ǘ᡺ǧѱю۴ ܜ㊊鴸А͍şڐ†ٟȅͽÜӤ 㤐޾Çǃ޿ݑ錁ڑIJج ŌħŴșģܞ䤢ǎٓ訢Ǝ ࠘Ǝ뺋ߏ숋вƋЩ„ 𑌦ގŖ榲Ƣिۣۛ푖 ӤҜחŪʅêӸ 㸐Ͻޅݮԙ߼öի՚쿱 ݅܄ا݅ϵأ܄ρ҉Ê䤬ò訦Ò ¢ȷ᾿›ᬮŊᆣ̣԰ᢱ LJ񸰖湼ơṹᡡ܍ۛφ 㖖ӸחՅåᢢʅۀêҷ Ԕþ߇лÎǟ͛ݞ䳅޽٭È泰 ·ׄס—ҩŒҨ§Ṽɐǡ ‡»ㅀŒֈɌĥ 񸡬ր驅…ǾáƓ í㨾ۛՎֆå짧Ъ奍ȐԐ܃ ࠐ㉾ޅݮә͖赆߾ڬ Ԣ肗ԩʆԨɂ ȂͱׂގȨ٬Ӄڐ ՠ򐇋ގ𮭅Ѩ€ͅу訸찐 Ȇ㎎ܜׇՏðԔϏ߼̥㧴 ǵ۝۵捋ۃ߇짶ׁీ 攸ఄ؂Ӆфٖ҅Є΂ 𰠑ﯠ秠ㅸÉ۬쀋ಃƀƋЩ Ȥ܀ఁ驰Ḙ؈烳 ۠ٙ舴ڸ́ݠݶʂŁŋӧԪ¥ȐԐ ܃뼏߻ݻ͛ׯ֫˿Žⷛ 線ߧߣʮ΀῾㥿濺ץÿ ޞߤϿ̦ϡ ޏʊү޿Ŀ䟜 秿ݧ񷒵Օ毩өȅÆϽ 枬󽾏ܾӃ϶ؼβƣ 簀﻾뻼鴾Ծ滽侣껼 Ϭ΢Ϩ˷춏򱙴ǧ謴⣓ ǤɔؘԷ웚 חƍ͍᫒͋Ч ÇN޻嵂ڽヲ fކ罺˯㽿ժӯ潺ʥï ⽸ޞפΎנޭ榗٬尼ҩ޲ٻ ۺꥑĢެ֋ּɻšޝڻ坘𻎏Ƽ ޶뫷ؿ譯꼕ފ驷߼ ׯ轶ځⱛǮ ܀מ輘ѩ鹎ɉǮёǪΒ ף۞߳𸞦̞ӽШâ 㽸уɌʳ韙ưǽࠧӟ ˋ詯Ǖ秸ɃϞҪυğ Ⱦ޹ݮ͆޽ۭ斋ߡͦݷ ݹݵۣܸۥ򫕻۽🜸ۦۢ񟜀 ݷЇ߽ܚ暲݌͡ꪛ ùط񯯻܋ʽκ̽➐Ϗ ţޞ޻۝ĝ҅񳑈σ ڞ繝ݎ巻޿ꅯߺ뺿̮ഺƥǻݺ鵮 ݗ㺸ծҪٙԥиإ繎ҩХصΎˠ ֖Ӈ㹶ḙ엋݌讪šꪋ򑈮ޅùؗѮ ⢋ܭܳҵ᚜󍎺î຺󳫩 ફԸݕ驫ˈ绲ݶϞҪ⟠ۃ֙߼ ͆޽ڭΗ߃級έܸӧݹ蜗εԩ ʥԨɑΩ𞺥ߩנ统Ξ ϹΎǹ䱜̦Κɥ΂ɠ񸬧δڹ򮮺 ι̌ڹ團λƜΝАǝۛ ΪŅҁ⬪򖔸̶瓧Δߧȅ͛᳹޽ حˇⰛƎܸ׎ŅíџԪظ ˝ǎʝቄĝäС߱ܚ𸳎 ̦鎚Ȏшڱ򬮺ШǓα똙͹ ধĄ옚쌸㎞חϝ囨𔕹 ʜŎˑđ΅؞٭ⱛ ƣ￾ʮگ₨ӻΌ濺ҩЮ؏ ؾ痉컻؅߷ɵ̦Υڈ Ά혌ۗʾĄܠ柙ۇ샃 ߟ쏭ӏ篭۫ɉޜ͵ٳϞ Ӫ;ղߌȾꕡڬ Φ۶ۛڿٮ뻼鴶勋ڍͩÝ튅 滺ɥà؎ϱض瓉컻ж㓈ܶ߶۷ܴ߷񦸶 ̦鶚ƣڨݵȶƠĎ혌ņ͖ۖ싋 ¶曝؆폃߿ڱ󳭱૫ڪ핕 ٙϷڲ왃Ձп˛ȅƭ񏐪؅ٿ˫ⵛ ݁뵘͍կꭗ֍եԪʖ֣Ԋ 􎏭֑څΎբ֖ٷܮ֬축ŲҲֆʧ 鴫Ьʢىī㭸֕޶Ѩ‚޺ا߬։ Ժ❞־Ϗ谶ۭ֦㣵筩٫ К͵ٳʳϞӪ҆Ԑߜϳٍ ՕūѫťਬщŪ Ȅ‰Ǣؓ˲˵۸ښͶؖҭ̶Ȥ 衐ౖΌƲޭ˖˛⢅欳ʲ陟ǭ غۛ܈겴뭵ՕҠۊ֖ ˓ȟΊ␊㟠ȅߛͦ続ͷܘ歖 ޚŅЫ܊ӠИج꾼ˤ惃毑ȼ‡Ύ٠ ֖㙷ܮ߷浵̦̥ݵ沢̠͘ ٌŌƛ痗ŀųذϛ̳ԔҼវ桡࠹ ̝ۛŃ촷̵Օ殩ȱ͏朜ַ攪ڐ ªê豾ˏԡ쏉缲ධ܀עޚҫ ̧ѱɪ޷ŦΎɠ֖き ߷ɵⱂƳѩĦ׌ͤȴބÙؓޱѦӳҒф 񙖖󦝹ƴ嚜̘ȴ蚜ͽ秩 ̍ݝƘՎԘ̥ίϔɓʕ␊ ȅܘ鑌ހޚԫƳԨƹ ёѪ߷Ɓ¡ٱڲּƎǸ䳍 ɴηƪȡꪑIJƂǛ񸣖ƎڸѨ‚޸眝̘ ƉΉ̀ꜙƍ߱ƶ뫱԰כꌵ 奱܀ꬩƜ㋗ƗύϞәڐ¦ê豫ˏԼ쏳 ׌׆ܴŅ熕ʠԂёƆ ΰۆ߰䄼׍惖䚘͝ьԪ±ă ́㍸⁋ఆ޶ΚӆĄ᎚ƌࠡ ڼ͍騯ʌņޞ Óݞ␊㟠ȅޡާӈ݁Ņޭ Ԃ酩ޡɧёު՟Ğ߇ϯ¡ы뷏 뿱ѯ콋精ӨܲٿĢ܌ƿǣ ⢞ү̌ڿؿ䟜ԏ٩з 㣾קտ諪ƕ驣ب蟿״ϩӆԐ ުꮯꗵܧҁħ痃㠓ҩ ؐȤ݉ȷߥ鍍퍰ٺ ԪǢĝьŇ㖗˺ŝʷ Ѝ݃Азݺ秮ޮյ蚛㺆۫ 骪ЗӼнė҅ӆԐߜ рځвӡδعȫꏏĢⰷ腂 ۛ鷊ܮڵ局ڰӂҩڊ˦խ꒵ڬ֋ ݂֮闗ڝ»㎎ƴڡק 軻LJډѶ䛛ݝݭԖʴᡶߛ ־䉶ָۼȕ藗ꚕʣԂѨל ƢѬئף˳񴛛լ븜ᳵ ವ΃蚪𨚲ٳĢ񱚌Ƴɳ싋ֳ 馎̤ь놆ÚߟݚLJӓ֦Ѵ뚚ݝ ӣ˵ǥёГ޼мʕ␊ȅ ڥʥӟڦӟ꽽¡ы 竷ԛ쨹ܰԬֳ؀ꦓ꺜ͣԵդԠՄưꕕ ֯ňŵϫԳꙙΪ䄤Ճƃߟӣ 궶뫺ҷڸѡӗţꂂם̸Կ ʕԖ␊ȅұНѱʪ񉄜 ӉץԛխⳁËՌ·Ѩ֭ 㮪Ȥ𢐀جԫ𫪴ڵҭоׇͩճԔ򒌏ƽԣ ȵ⸨Խ٩ׇխƭӓР֪ժ Ņ֕ӿհڐªêֱˏԡ쏳 ժةԪ޼쨅鍍 ŕ퍰ʖ䂈ɧȤဖ€֮ʔʻ ̌ڹʱǃʁ۫ʎځѶ 䛛ݝ֜ӣԨ˕ʒёЙ䨳ϔߺ̡ʿ饭 ۇȕ˛ɔǀ՜ऒĕĊݠ ˱Ɔ늎셕਩􅍆꣪ҐǃŪ ˊݥؔܜƨӊĄܱ՛Ê ٩۴ڔǭبթ똕ŎՕޱՔޞ ԼŊȘšǿك̆Ԋ咉 ؾ廻¼ր̦Ԫ„ ɉĹّپ܄ʾȈ 䏎ʇ۫˻䝝ޑڪ鑷ɛ卍ݝӣʫ ɉüبϟϗᅲҖԐߜϻ ɥȄׁۓـł̦ ƃԪ‘ƢɈؙāٶ܄䳳ʶ 칩㻲ĶʆΫ䝝ͣڪ鑵˚䍍 ݝӣɪ岲釩ԤٲٳҨ Ȗ҅ԐΞ睞ʥجۓת𝠐ȷڂǀǓȹ ܰ峥ಥӍʅҀʤǃΊŘʱŏ󺸨š ޺㝝ԔҸǥȈʇϻ۫˻Ҏ ڪ񑶷˛҆۫ǭ˫ٙڐܬ򤹹ґ֖ Ƨ堕Зªٟ֐㰷Ģۀϗ ͉قߗ߰ـŒœЩɒɡ艎؀֤ ޖɖ२ؐƲ̲ຊƤûߏ پ萴ڤ󳤩بꤵ㒚٩˥ ͕üڲªêֱˏԡ쏳臫߶Ģ ƊΎă⾟き߇ۃŒƃԳ‘̠ތ ؀ކь¹μށ⩩䤘ģļȒ ƫĝ⎀緶⦦ø߯֊⪪奸 狊ąޞӜ߉ɿȅ ޱΎ؇ۢき傉ېрЀ݅ РńŘ兠ٴ܂쿯ƴ΂쌌㎊ Ľԍݭ񊺺ڪ鸑ď۫㪩׋ ĕٙԀҢ񊊊Ύӧモɥ˘ ҅ԐΞ쀁ʹ͡؀ܮ߇ۃ춐Ș̂úƃԪЀݕ ŒȀȄҐąňƃ尴ϋ愃Ƹޓ ȸιŽ듶ڄ¦㣰߯ǵš ѡёИퟯ˓ȊܗϟؾŠʢ 귫˺ۿɥك 热Ɔ낶؀ɄӅҁꪂĢؚʊ ˂ް̌ڰܰА ƣ݂LJۅӷРՉ͍ե헋ʄを بφقٳӧモ˫֡ڷ藫Ï Ӡ豕֡䅥둕Ȟۈ܃ րج䂆өϢ܄ؼ؀ ̶σ₌냽 ᷷㣿ϯ奿ί㗖᡿𧳳 Ϟ񟾥ڲҬϿ㮱ꇞЄ߉к ߸ߣ걕ˡ쀮잋ʅ ꪠĢ𠐀ʜ⭮򱒷 𐷰ޜϏLJֆۘސӓ䵴͍ ūɉī䕔ތ֖ŋ润ٳޓȿ όƳ׫𮲾҅ͥЊ⭯ڪ 㨠コ㫨墟ʯԐ߿뀱Á͆ಁ Шܲ؊ห𬮂ٰ́Ԕ򒻼ؘ А𐸌Ӄ纻LJ烶˾Ԅ䚛ݝ 𫫹ՆŅƭ󳲸ܳϞ񟮼ܔ ϙ˨ڜ׬䫨ߥҼ˥ʼ Ъ惸р ℁فކ˜ŀ̇΂񂳾䄌 ࠘ﯧӍݍߧގڽڸⴆ秮˩՜ 奧Ω㔖ʸŜᢢᡧ𲳹ٜ磜ϹϞΊ ܟ ֆЊʅ㡯फ़ ֣ݗ…ȅ؟⠁Έʅꪠő ǃీ鉬܂Ԇƞ ٽՅٝֆ٭䌷԰竫ʀŅ 痕Ň좢Ν쬬ӧ← ڗђ͵׬䫨ߥҼ˥ʼЪ Ш̆ĂĢł ‚ԔǙܰ ﴵ洵Ãձ뙜ՇŨ԰ٙ¨怔 ޞ…ϟܟḲƖ¹̠ ә߱Ҽժۏʧ֗؊Ъѷヤ ª߃Шဖ˰퉙ξϽlj ƺŷڂ޴ڰ狫ܑذ޲Ȭ܎ʝϿӽ 󸽅Ӹˁ̶覄ྀ׻ íꦢҁʥ㱸ȧԦĂͬ㶉ơلÛ蓌̂շ ިȵƒ΍ݾڷ󿆢˜쇮ӭܿܕ܏ ٔȲ괤Șޑ¬Õ޾ꈕӬ؞ ؋͇֫޽͞À̸Ø 񮻝跡據ׯ׵ںڅ娕ň̺ӝ̮ǡǣȄׁ ݮŵ魊߿鯠Õ ãҐǩʓאǽʳͅѿƫ׈ҽųƎ… ߔ煭ØخݻӸ݂䂗 £ꕘڦ堛岁ҩȦئդ ᇡڅϷת֮ʖגŕݾǮ 돸ԯ׵ݗѩزϲȴȘΠޑÕ ϾꈕӬ؞͛󃳙Ո䂗 ̳驢쵠لƃՖժԪЮũŢ旝ԊȤ 蔢帼܆˿ᆬ׻եǃіҖť붴ڗߢ շ܏ϲ괕Șޑ ÕϾӬמ޾ా憼泸Ņ Ȏ脧ɧھ§£ꕪԂ⑊硗ҲźȥĂ Ŗ袒¡Űٸܮ⡊ܸ᳭ټ ûߟع߿ўўԐᴂ Ǩڳגλ缂ѨԐͱȊг憬ӯ˘·ƣ νᐘ߇ޏִ£ԂꕪԂ⑊硗Жȧģ 䞎è༐ͽ޹dz犂ܖ璴ŹΝՍ ؏Ŷ􇙯ѳ֐ƾ龦 Ր󷳂揈ө鮯ᲁ⼆λшᐆޏ݆֋͢јЫ ԪӐډ㐋Ȭ ѽՅϔܮ Ϥ馊ه춓Ų紮ߺџȌ֐ 綉򒦓ŅǚٙƚӘ߇ޏ݇Ӂڭ趡 ٚڍ饭Ԃؑ硗얲ȧģϷ نɧԐڥӫͅҵϔٚ슺бފݳ 氂堂ՐⳲŅáĥĕ ѳ鴠އڍ֡ҁʥ؄堓̆ťǡ蔢Фχޯ 㙸ݠɠ𼸥Ϯ춉պӄշۧˑ˥ϗ ˑ̯Πٙ洗ҜⲰՂͭ Ԫȥ٬²êɽыÐքǃ ؔƼᖘ컵ɴҍ㒕Ī؅ϲ؅포𸤆 ޏѧͦЯԫĥ岩ıĮ٬ĺΉ␍¤ʊ 쐈ՅДƅŐϏ曊٭ݏ̦طՎ ق֞§ôīͦєݭ֡Ь¡ˑ٬䲐ҩ Ͳɤ،ơ¡׻Ł䙤頊ֈݾن♘ ޼Ǫޱⵞ衱·跉֋͢ѠՈꕅԠܦʥ؄ 䁈ҩȦĂͬѨфÐχޢ˅ ֮ҵַՐĝ򶳂붉ƃҵѭۊ֔ʚ ⑨򹢛̆ȧԤܓŋͤ≇֠׋Ł䙤đ Ζȁö渹ѿƱ╴ڬբҡԢŢЀ 鴦ҤĢǵŒ„Ðߏǃ򁬃σӉ 쎇ುڳ䪝ߛ؅ڻƼƓ߀绫ѬҨˑ٬ ʦ颕ҢɢģĄᰑޯД˅ŐσӉ dzՊ쮛哓ǪȈےŪڮ홂ҩܖȐ ،Ɖ̈́Ј烯ぷДنɢĐျ춥⁳ ̓؅ѫꯀ۲Ɍ񢖕ۖ́ أޯšܔ–̉𼸝Áƒʜߛ؅ڻƼƓ ߀绫۴Ģ؉ш’Ԉǂ و᫕䂓ȷՐ㕲۠߿ ”牧ิ᳁ج̦恊ݸ Րο﷯󻷩ʶ٦雈Ƈ𸈻ح 㶿ɉǪޱԊⵞ豊令ӒҎ󸛠 ÜΧؓ涓ӣܿƱ╴Ξѐ ǜ𸎰ڥ쳛ⳙف㾩ϗߡַՐԅ 亦ϓ݃״ѱ╴˂܀ڬά㯕ιֈǔ ǪȈŪ짫ྗĽƪȞϘƯ ͝٩㐑𬂥ڬΞǪՐ𬂌 䧙ڬ؅ÝؓŪȸ௸ƼƓ߀Ņ⬂ گˡᘆᾆᘆ̰͠ؾ &] [s5; Image designer stores images in .iml files, which are then included using one of iml headers into C`+`+ and compiled into the application. Such images are in the code represented as static methods of class representing the single .iml file ([/ image list class)].&] [s7; &] [s7; #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7; [* #define IMAGECLASS ][*@(128.0.255) MyImages]&] [s7; [* #define IMAGEFILE <][*@(128.0.255) Image01/Image01][* .iml>]&] [s7; [* #include ]&] [s7; &] [s7; class MyApp : public TopWindow `{&] [s7; public:&] [s7; -|virtual void Paint(Draw`& draw);&] [s7; `};&] [s7; &] [s7; void MyApp`::Paint(Draw`& w)&] [s7; `{&] [s7; -|w.DrawRect(GetSize(), SColorFace());&] [s7; -|w.[* DrawImage](50, 50, [*@(128.0.255) MyImages]`::[*@(128.0.255) MyImage]());&] [s7; `}&] [s7; &] [s7; GUI`_APP`_MAIN&] [s7; `{&] [s7; -|MyApp().Sizeable().Run();&] [s7; `}&] [s7; &] [s5;= @@image:609&764 פź֔ŨŴРۮǚ۶ 麚ִŖʰ̝㈢ثݙ̝͏ùү Ҥ֑ݩɰÏ뉸Ҏێہ떌ꠁ ֝ӭ鱸ÎꏺƯ냊Ѿ͗Î˷ Å⸇Р⛗ű𤇏̗țŻ㑾謡蔾м̏ Š͒톇󬠟ɁƩݷ׃޹񫽹쿰ދ ̀ϯ슩Ķۯñ£ڪЂɧ͡犋󖪿 ДÍØԂ䁙ǧ׸Ƃż ɑ̞ǔɘϻ㰅ۈʓ‚ӿܐȲڼ´̎ʼnε ̵̻ћːͶз׆﷬Ė ۺԙأיթӴĴ孿Ҍ 늫׼ԸΈ۝ٸ߱㗾Ǭٟ쭴ޣ 򖪷Աͩ԰λսߖёݪ٫ 畞ָڀļ؟䚶ŵ֡ 菜Ծ܄ʩݴ噧̏ϙꌡ 뻊鶌ΌǶӰ״߽騲ȓՆ ۴蝢牶̌ݚеĠ 򗉜棉ˢ䜥Бڂ值簆É ݟˉՊǍۅ®楽҅׻縴ϖ릺΋ ڵǟ˯£ڐڼЬ۵ʷꏽڜ׆䏠㥰 DzѮ匹إչ⦻І̵غռ߷ξ 휁궗ř䘛Є쪰뜪ǘސ͒牪ϊ؊ЪޣΉݛ ҪԶ؛ܛ鐑ڙڵټӍҷ͍֙ѕ֕ 즵哩쳴³ч행͵ǘϼ㈖ۘٻ߄ ͋Φݎ٫޷ٳ̪ׅβΊՆʿę ۖ蔏ȩ̗ţ͖ɞΌћçڶ ݋ûߘاǰՒի؁ ߌĵӮؼڵ̖㈧᳀ُ¯̜֙ 򄊽իڛԦ♷͕汲躎ġ޳٠׸Ȣą ĥ鬅ޓҙںҠʕ͂٩⌥悹Ơ І잟Αõڮԝߙķ֒홋ýװ ܧ趫ѫّÈؗƒ֮Όَ߸ 洮̛ۘӣϧ̸Үijス⏞ގڹЁʴ Ҳގܲͻݫ皾߿œξ񥓾ݲDž ؝ߐݣՑ֘®ǵּߩՈ޴ޛ⻊ʿޞͯ ̇쫠Ⓙұ诩Ճ㑆׌͋ЇϤè۶Óޠ ݾлĞśٮϖ嘧շϘ⧤Ň خǓߢޞնϜع˰ߟî͂ áĞ飶˩ϡ꣯̂ھԞݧڨɠ˵ԞۮԖ ܴǡ믁ߣ̂ھԵ턤㬹Մڨ ƛ嗗ߛץۆάڲ꣝܃Ԗۧ ״ϑ𳉼񖲡ϐϻ̛ знɜ㒤ـɕכժɮҿՆ ى씩ҀՆưدɣᚩԠЧҳ ƈ׃ٕƞȉ݂ŞԠ؍Ѡύϛᒆ ׃ًڦԶ߭޺ǕڰЛ嚝ԖЛԖۇ ۣ܃ݮڲԖ뒨ꣶܣԖۇڱ ˣھƿھ뒨ڲĉЛƚ嚖טћΒǣα ̕Ԗۇړ󅆞̥܉魓ƀҋݸ䁃楍܏ ˜⺟ܓӒȵÏ䥇纶𣏈 Ùϵ˷ &] [s5; &] [s3; 2. Image list classes as arrays&] [s5; You can also access images of image list class as an array and even change them:&] [s5;= @@image:1009&564 ʀ񀀀՞ߕį虓Ǹ҉ѱš蟈į 뭍ʠ諠ۘڪ̻潞Ͼۙݦſ͢܌ ͿٛǦٳɕɬʞ㘇ž٥āȤإѭ ɕеˬٻ䎤߳ō۔ۃû߻ 񃫣—Åݛ§엉ǖᅝȜƆ֐͍՛ Π׼ӲݿŭЫ٣񈢏ۜŮΒȳ䛩 չ쿻ŭ↗Ń󓎽흥ꤚԸԗ ljծݢӲ¯֩ɮѮěФќԭݚج Ԯ뗃˖̪ȩؒۮ࡭ͦݻݧյ ́ߙ軴𱷾䗵²ԭ˱꾫ǮӇש 抝̾玼Į՗ߕ׮ۥڧ;܆̨ɕ ڶ嫤əΩԬҪסݟ˪썼ꛁЇ ݴʭׇĪݹ䠭Ǝݣ ͕ܵḿבձƞ򄛛쯌ሊ߅ղ͘׹ ÷ǨϨזþ˙Юޠ ԰ƼÊ̽ո֖ 𗠁Տͽؕξʁ羱Ԯ◦ݡ˸ӈƮ󗂵ʜ 򴦥ԗ驍׍ʚȸ삶 媉偻ٿ͛בԮյó֔ǧԏ̇ϝ ݟ®ڋڻ鯦˞؋͟ޣ嗍ݮʇ Կ҇όŢ꫈֏Ŗ̯ϩ۶ ޗƑՏœ⢐فەݬ͈ ٭״ʱɮ顗ҵҾ޾̵߳Ǯն 작ⷰ슖Ҍݚֽѷޭыﻍ܅ݡ ß뗻횱ȗꮎӭ֏ڙЧ޹侒 ȸ삠 ʮȀ &] [s5; &] [s7; #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7; #define IMAGECLASS MyImages&] [s7; #define IMAGEFILE &] [s7; #include &] [s7; &] [s7; class MyApp : public TopWindow `{&] [s7; public:&] [s7; -|virtual void Paint(Draw`& draw);&] [s7; `};&] [s7; &] [s7; void MyApp`::Paint(Draw`& w)&] [s7; `{&] [s7; -|w.DrawRect(GetSize(), SColorPaper());&] [s7; -|for(int i `= 0; i < MyImages`::[* GetCount](); i`+`+) `{&] [s7; -|-|w.DrawImage(50, 80 `+ 20 `* i, MyImages`::[* Get](i));&] [s7; -|-|w.DrawText(80, 80 `+ 20 `* i, MyImages`::[* GetId](i));&] [s7; -|`}&] [s7; -|w.DrawImage(20, 0, 50, 50, MyImages`::Get(MyImages`::[* I`_Circle]));&] [s7; -|w.DrawText(80, 0, AsString(MyImages`::[* Find](`"Circle`")));&] [s7; `}&] [s7; &] [s7; GUI`_APP`_MAIN&] [s7; `{&] [s7; -|MyApp().Sizeable().Run();&] [s7; -|Image m `= MyImages`::Circle();&] [s7; -|MyImages`::[* Set](MyImages`::I`_Circle, MyImages`::Triangle());&] [s7; -|MyImages`::[* Set](MyImages`::I`_Triangle, m);&] [s7; -|MyApp().Sizeable().Run();&] [s7; `}&] [s7; &] [s5;= @@image:784&920 ǜ׮ż۰⠭ԂЈӅӉ ‚Җՠ܂ҶԴۼ潟ߴǣ̹ǝ٬ Ⅸ幃ӭÛو۸οˑر㑕첝˚ҟ ŏƀòĢޥ֌ÖѳìԎܮӶ 츧寨ܱÔ۝ʬ祶ȍ߃ث˜ȶ ճǗɠǶޡвúŸ ѤکڔŅޅΔ凹͋ բɘ滏ۘȿ頟樜đ́ö֮䨲ǽ٤ٻ ̫ۘݸ•ѩٽ緿丷ګ ԪÃٚ椮ݸíȟˎؿ鐻ģȰǷ󛖫⨚ Ȯۃ܂󪭂ԣ̐؄ɢ֝اΊ̆ Ďظŏؗϓ͝ܜ驑͏媕ֻۣ뿲 ⤶ŒիŁƳɶLj؁ᇅјؖ œگȠ։ԕ뫌̥ᖳŎ֑ ٘кʈԇܘŽΧ㱹ւ 𩩹𑙰򋧛Ʊ̣٤ְĝ먭嗧°Nj ΫѣDž֛ֈӅɩɡȋᱞ Зޅǵ鄈ٴ׋較عڱůŎݏލꈿ ٸ曏֑ۤѥАǸ׷߁鎾޸ȫﲰΝȝ󗜯 ݺሿŏӻᬖح֧ƪΩ߷轘┱ع Ɗϋϼ۟ĺΝی スد߿ͿՓʰۛۦ΅ɥڲޕ߻ ❚ڱǜ󾲡Ģʕꚜ̌ ٲғø蘫ϟޅаĺ ؘÑс٘⒬۫ߴϤó骲 խً̄ެܹ񊦆檘njսѺƀƌ܋ Β̦Æָيٸ݇ȕ׮Ś҉߼ ;٘Õ̕꯹ɆӚ޷Ϩ⬤ɪ ۓǻ⡰ڛ۪ϑྩյ 裂ӻ罗͡ð鄐̶⡰씖뚳 ՑƜҌɱ֒⬤Ɋ㥩Ҍɱ֕⬤NJԘʦѮϙ 财纺򹈅׫뷩Ӫݽ҄񑥗ωȼӽՉ 󽶈ڪݵ돈ė⯔㥩ʄґڵڞ謬ݒժժ״ٳ Քꋐÿ拐ʔ括𺶶ڵ °ֽ݋񕚘ꪫ۰ڢݴ ̱䔁֑̆ίތ܃ۻԚ¢ 옾˫♺㮰Ƃ̽舎̃Ł舫Ƶյ⟴񑪪ިꯩ טƪ綨ʬׯɹ™ߩΏӫиʼn췰ϡݻ ͵Ǻ۸׽ʼnվِɪ١ñ㥩ƜҌɱ֒⬤Ɋ 㥩Ҍɱ֕⬤ɇ㥩ҌЫɱ֒Ɋ㥩҇ɱ֒⬤ ˫ˮؐᵼŭ֜﭂ٱŌպ՜ؕܺ ē㕪ǖɕⵍա̴證¥٣ǭꅖӝ ھҜԹ״Ŏɱ֒⬤Ɋ㥩޵ƔɌՁ𣋤 ؽ֛ϋᬑأύճ߈Γإ̕ͺϒьԃ ΙްμͶΒćߑپᲈݒɫ͗ŠֆâǴ 묬֕⬤ኤ޻å⼭قáܨаڔʆ˓ ڦЕӬˊ͏ձèڀǫļûŎު𰖓ܫǬ ֞϶˝˱֕ا֬љʧֲּ菫؉ ñ㥩ƜҌɱ֒⬤Ɋ㥩Ҍɱ֕⬤ʉْ̒Ɇ @@image:800&914 ŢʁĠ•ëɂѻ ƒЄЄċ߶ݿݳĢȤ ˜ڔ굯ݡۃٺڱÿȹ܄ڞپօ̂ Θߧηքх誇שѶ¡񼶱Žݞ ݞލϛ̏ӹ۞ϙڑ޺؂ٹހ彟د ΛLJ񷐇պɜہгѮĪ ӺѵÝӐ⼃Dz¼ڌӧ홝ӑؚ ޝܟ񺽌ţ๚ؕœ֪쮫ҎնϪ ♪ѬԞո۰됞ٝۧ≘קԱٓ糅Ϛ٠ ؃퉏췙nj퀳ÎٌĜƣ ä̽ūɪ͜ڞ͜ ᥼Ʈբ눱؏DzѬ潹щɅ֒ÇŝӼ §ǝ޴霐ᮋƝ۸݉㱀ϱԇȜ ̫Ӓלƒ̣惪ƕᶋִ֢ ꗃݵЀ씣Қᒼɫ躖 냑ۓŇѤŒފͷː̎ӖؕƣîۡĴ Ǖ冶âˌςԣýܳ➯󾛾؞Ƈ ֜؆ޏ㎏溚޾뗟񸴿݇́付 ˌ֏񼖦惱ӵ£׌Ƅ쇐Nj៭ٿ󕬪Ս 泥ثӧḭ׎ճﻣӣؕ ďًÒ޽ޝŒ⫥η̝ﯨ 󭏪ڵĉܣǏߡҕ֩˗󏙯 Ѽհ骑рȁۖϓߔďŗ׮ 飨Ȼ߀ķ–ﯿϕȍ稻ܶ݀׀ ߖپ͛榩ٝ๸​ߡ˷ÏϟŽ Ԇُӊ۝ɮѣ൶Ā€རϏĖۖ 定َؗ끾Ï۷Ǯ޵뮮ۜ샥ඳ߫ׯ ֞ܖꜼؘФ횉܄ ȓƄ箧܍נ¹şԴƶڠÇ ޓܖɷ͚͛䗿ڰ ܵǾ—򐀥ɾܼ䤌ʜܖ節ڣ ڵٓž܎ලݾ¯޽ڶۦ͛׬ رׯãУ숑ܿ톽ڮǁɀəи޾ ݺƍǮϻ؁Ռ뻶ܨطͫ ǀƒ߿ϟȑ£·˘ܾއܖ煀ի믫ɿ ͿМ﷞ؐӱŷݍᛶД㑱 Ӥϊܱ޼àҥ۷ ù㏿Ϧ趞뮒ᯕܸՅזŏɀۀꉯ׊ NJ˺׵ӎ՝߬涗Ѯ˗ ߊ۟ܧ팃ϻߨվܯؾᯄс巵Ҏގ˗ մϿώͷߜシ۾֥Ɨ оܾݽɡΞﮌ߀ ݈ʗ࿿ꡡ󭪪𺷷²৖߫׮ 駟¯ԩӗ抶梾ʭ⫷ܢ⫷ܺʭ⫷ܢݾʭ ޫܢʭ⫯ܢ׋ʭ⫷׈ܢʭ⫷ܢʭ⫷ܢۧ ۯ׷ʷߕ׻Œխݻ漇ժцǗؑ ݚ͂͠·ƍ֯վƛͨƎ͹ρ Љۙ鹎ɫ߹Đ߹喔Ꮇٹْɶ ͏߀ַյۊ̃ͅоԍ杻߰ۿ⿀Ž ɉ̨ʾڹܛ˔̂猹ؒӋב܈ ߒ⫷ܢʭ󅍂ɡϝۂߋϷ ʶۑϰ񕵌⓷еШƍ棪 ՘ŗ֯贾ѧʰȎ˴遼ߗˡ 甐ߒǑ߹߹ۡ߹Ś⫷ ̧ϴﲑ &] [s5; Index constants representing individual Images in .iml file are based on the name as defined in image designer, placed in image list class scope and prefixed with I`_ (like I`_Circle in the above example).&] [s5; Image list classes also provide unified interface class to its content: [* Iml]. In fact, method used in previous example are just wrappers that call Iml methods:&] [s7; &] [s7; #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7; #define IMAGECLASS MyImages&] [s7; #define IMAGEFILE &] [s7; #include &] [s7; &] [s7; class MyApp : public TopWindow `{&] [s7; -|[* Iml]`& iml;&] [s7; &] [s7; public:&] [s7; -|virtual void Paint(Draw`& draw);&] [s7; -|&] [s7; -|MyApp(Iml`& `_iml) : iml(`_iml) `{`}&] [s7; `};&] [s7; &] [s7; void MyApp`::Paint(Draw`& w)&] [s7; `{&] [s7; -|w.DrawRect(GetSize(), SColorPaper());&] [s7; -|for(int i `= 0; i < iml.[* GetCount](); i`+`+) `{&] [s7; -|-|w.DrawImage(50, 80 `+ 20 `* i, iml.[* Get](i));&] [s7; -|-|w.DrawText(80, 80 `+ 20 `* i, iml.[* GetId](i));&] [s7; -|`}&] [s7; `}&] [s7; &] [s7; GUI`_APP`_MAIN&] [s7; `{&] [s7; -|MyApp(MyImages`::[* Iml]()).Sizeable().Run();&] [s7; `}&] [s7; &] [s0; &] [s0;= @@image:1000&1194 Ȁ從ǧϭ筀良ڠچŃԳ ϻÔѰŶé ũ勚қуʺ땳ةܹừƩЯʁ Ä˷𩋏㈠̇ދߌ绯璾쓪 ՛ƊРҲܪ݋ٕȮ۟ф֏Ǚ˩… 䉭ғߪşÇ͹޿ԫ鲰ϥ䒈 ɝùƳ鍴ݩ畍ڪ˵αـ҉ɅĨ 앎±Ҩ’ۺŶЇڬ׍ĪȘӨ˩ֶϊ֕ۙ դ̍έͮ♽̖МĿڤ䑅Րԙş 鱸聘ا赏߬Ӻķ܀ٟԦލ׎ ƞ£ĺփԵҝÓծ˝鿯ͥ̐ܺ ̡⎓ªգԬƯҟͮ;ݦע֏Λ곿 ߼ɗߓ;߶ո񵕺׸ڪѼҪꫫ ׮ǡɿهߴއ๷ ƵܹߘהӨí躵ȫߥܤʜҕ Ɲ޽𾺗ݕΩƢѲ֯쯝۲٫Å׳ȓ 생ϽѲƽظ٫Ք捊խى ǯͭڭҨ㏸ͥϔײ դёމ׮۫ÁσŽճҭͲݪ뭹 ڄŷʂ߭ƹ쐭Ի꣼ɔҡ쏦瘝ѭ ۾ϾԯߤޥƅܤҪѮ֑ڥڰߵ ԌѶɱʉ䕬ޑء־դިߥԲ ׵ӻʼĄӹޘ뿭⬘謓ٲٲƾѕ߹𪯎ՙ 졺Ҳȭ琷Ϛڜ⨯Փ ݫƺƶưݙʮȫˇГ΅ ֟źէݒ땙ꪋԐ箝Ԏ͒Žأ ʧᕽ«Ѳޅ…겖ݻ׹ٜ 쩞݁׫ѨҼĶѴ太ҏƻ՝ά ؼĹ׼޵跹לʨ䕝譠ި ȑ¨ؕٴُҵ仚ޖ湷ϧ ֹҪꕅã藿ֻ۪놩ȟƛ㚑ҋ񕎞⬗Ͷ ֙ݾї묛ڐ޿ų򌵂ٚț껓ӄŧժ˳ 敡񷅒㫈Ϥѵö֪۶شՖݣ ǂۜԯޘɵȫَ۷ղȒ޺ ٰ۲ǖř򙮽ϲ͔珑ޕ՝ɽǗʊ؍ҵ ѥú䃸ꧏ΍ůϿ۹ԫ䥟 ǫݼٴԝ𜔕י̰Ģᅤ̈́˜Ȫ ߙ܏٨ҏˮПЄ۞ڟꌕ ݭ܍ߗ겑׿ௐьﲕ ٺߊѯԯךƮʊ ׀׏̧׀׀格ƽ ʅʫʫՈ̄ށށށށ ށށ݉ԙǕѕ ӈޟ ܜϐוޔސޟށށށݙ𒀯 ׀ʬȺӽ͒ъ ʢ毢دìꢼаߒՖֆ髍߷ѫ؍ ˜ܟꀯ˫ҭᭆ栵ω ̢鼂Ɂփ󨢓˒ױ݌׫ ﴘdžՏїͨɭ֡ޘͥԒͱ董Ֆ åϼ߳׳ǭר̂Ǻ巤ȫĢ㺓ү ޢԔށ˂ցؕΌ򤪴奯ᕦל 瓗ՔʎΟ蘏ԪиүĚȒț ʰǝڼ䰸ijލǒר׎ʟⲏƱ椄 י蕤̮Պѝ՚Ԋ썪ށ׀ ׀글׀ի ҾԂޟ緿Ϗ ׀׀Š̄ށ•ށƎԾ̄ޔ ޠŘŁȊȊ糔Ӂ׀׀׀ȡʵ ˢ޿Ǯۢ򎝇×Ϭۓ㟻ӎ﮶޴ގ սșհŀȾ̓ǭߒ㛍ӟ Ս &] [s0; &] [s3; 3. Creating and altering images in the code using ImageBuffer&] [s5; ImageBuffer represent a write access to the immutable Image value.&] [s7; &] [s7; #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7; struct MyApp : public TopWindow `{&] [s7; -|Image img;&] [s7; &] [s7; -|virtual void Paint(Draw`& w);&] [s7; -|virtual void LeftDown(Point p, dword keyflags);&] [s7; -|&] [s7; -|typedef MyApp CLASSNAME;&] [s7; -|MyApp();&] [s7; `};&] [s7; &] [s7; MyApp`::MyApp()&] [s7; `{&] [s7; -|[* ImageBuffer ]ib(50, 50);&] [s7; -|for(int y `= 0; y < 50; y`+`+) `{&] [s7; -|-|[* RGBA ]`*l `= ib`[y`];&] [s7; -|-|for(int x `= 0; x < 50; x`+`+) `{&] [s7; -|-|-|if(y `=`= 0 `|`| y `=`= 49 `|`| x `=`= 0 `|`| x `=`= 49)&] [s7; -|-|-|-|`*l`+`+ `= Black();&] [s7; -|-|-|else `{&] [s7; -|-|-|-|l`->a `= 2 `* (x `+ y);&] [s7; -|-|-|-|l`->r `= 4 `* x;&] [s7; -|-|-|-|l`->g `= 4 `* y;&] [s7; -|-|-|-|l`->b `= 200;&] [s7; -|-|-|-|l`+`+;&] [s7; -|-|-|`}&] [s7; -|-|`}&] [s7; -|`}&] [s7; -|[* Premultiply](ib);&] [s7; -|img `= ib;&] [s7; `}&] [s7; &] [s7; void MyApp`::Paint(Draw`& w)&] [s7; `{&] [s7; -|w.DrawRect(GetSize(), White);&] [s7; -|w.DrawImage(10, 5, img);&] [s7; -|w.DrawImage(40, 25, img);&] [s7; `}&] [s7; &] [s7; void MyApp`::LeftDown(Point p, dword keyflags)&] [s7; `{&] [s7; -|[* ImageBuffer] ib(img);&] [s7; -|for(int y `= 15; y < 35; y`+`+) `{&] [s7; -|-|RGBA `*l `= ib`[y`];&] [s7; -|-|for(int x `= 15; x < 35; x`+`+)&] [s7; -|-|-|l`[x`] `= [* 100 `* Red()];&] [s7; -|`}&] [s7; -|[* img `= ib];&] [s7; -|Refresh();&] [s7; `}&] [s7; &] [s7; GUI`_APP`_MAIN&] [s7; `{&] [s7; -|MyApp().Sizeable().Run();&] [s7; `}&] [s7; &] [s0;= @@image:584&629 ל܉եȲˆ˄􄂁̉ā̼ٻޜ ؍˭ݭ˪ӕԒʪې»텿иӪߺ ﷩Իط߃߹גʫɑǩݽ 䀍ͺϥԵ޻׮ߐ靰 ָ뿃۞ӊν׭ޖޖ ӯ҅ɔȹϾߍ͑׻羱̯߽ۆ ˻ޛϟȁӜ➬ɷ ԁ֓ңȽԯʣѓ𕜒ڽߐ ֋캍ߍ렐ŗ̠۾˿ӕ򶺆蝑 牰՞Ҏӭ˻Ԭ ډ톮쵁ߕʙ⭜ꩻիȧ񖞄͜οէ ߩ¯ƐνװʛޯЌȰ ͇ݱޞ򻽡ڳԘ򟿪 ュ߹߭ۮް怰 ˹߳珵忞Ϛǀߞ˿捾ԗ υ޺ۦ怫嶛礗ߊ ғﹻ؝쏿˹׮ㅚޣ˒گݗ 텟׃축ݟȳ׃޺ۃ е𳛀ïϗ퍎칩Ԟ ‡ֲ޹܆ӒۊݟܭŲ 欢㝧˼޻Ĕ˞ऽܝ ŝޯ݃ڂޚŽԍҏٶ힞 Ϡぇ٤ݢ싫ٱ۲ ܹӔ“Ȍ蜟ٯōԷ뻗ﻞ ÜȶҬ񮡟᧫ۇʿᄋ ƫˑܦݤ書ؙڞºߞ㑃 ǡ؊ͼά܄酿񀭽݇ԟ۫廮𽋐 埾ȏﲲގܼ︂߯߬݇ ڟйϯ֞͏ސЇϖߞ״ 쀢ۗߒطˏ֍ٓ ؗեұʾˠнה󟏡࿠喙ϻ ڣܬח⃝߹鳖񱸸ųڑ߮ ۃۜߜŭ߫Ϫʿ ܹ潤܃Ǔ˼ݳȻΊ€ۮ 쏯ƫѸ❸όۓޞ ݫҫޕ؍ȗャۯߩ헧߾˭ Լް۫޺ؑƆڞ꾹ۮƾ򚼏 ꮹ뮺˼ۋ녹͙ 祹܉歘ꞚΜ߯νޣꎇߎڟ؞ ⮓̖軺ȷݚ摼ɮӷ՜ 蹞˫スŻෝĺ硷ɘ튯 Ν쁫ϴ֚˽᛹Η󟯿̗ߍ ӼӼַ۷ۣ鋝﫯ȯ՗ ⁞߯Ծǖᓔ瓶뙃虺 ٨ʬ╵ԍ̬Ł۹۲ϳҝѡ 펊鵨ϋȥ٦ҶЦӒ荻Ĩꬢݲ͊僕 ×肋Όԡӝ٣􎌻ד󝜩˔֢ ˎёʡұܭ߯۶ˆσ̇ ĜԦעĮ相ؚΘѦޢڊԕٱᆫ¼ Ʋۊ񰭝²ۖӡ򗎈ϑѶ᥾⮦ ˄ꤪʩψ̘ŎÕʧڊՕӹ ቌƢ‚꘵Œޒẚթə ˧϶ɶ垭ϯҤ󔤲ۡв湰̋񀵑ϓ񵐈ԑ۝ Ȩ񊽊ޒԸ諞㨅Ӡ Ý͇ě㵑ȋ׃֨ʈ̒⬡Ӱ߅ڃĕ١ǫ虞 åߺ͓텮󝬁ɴ Ϲꮹʰٹ갱בݕՈĔՁӉå敀ےߔ ҋ臃߰ÉʄڹִֺͬڤĤ ˋԅ񁙐ؙ“Տߵ恤؈籴у˵ ۡȋסםʐ݂͵̵먣ךՐ兝ėၚ 虷فږ̳זݠ鞅Lj臁첍Ьۙ悍 ʸ؀ˍա㕲ٮӁ޲ŧȑ懼珽Ϡɮ̂ ओ˭塹즍ڙ䫓Ͻҳʡ폵׳ƨ挢 ɩʰ̗ƴɼϰۢсΎṨ̺ɵ҉ ֺś꤃֓Ω钒ΩӦ諐չӥDžNJ Ѐےڲнᝬځɶә݈ʥ۩ī릣ĸʸ Ԓ͚ű̙֥婷ƥřށ˕ 枡Დ٬맠ʦ䫑Џ׊ń̚ ĤґŐŗтͯˀ䯠獨Ζ߃ΥԮ ̶֢ʤijܞƢؤܑգԐԣݵ欯՘͌ۓĸ̘騧埔֔ Ҋم“䬀ʼψތ򋰚ԇܒԊƒ謑 ԏߊעՈ֚ћ኱儡З㒺ʣՐƥ× 奇ˮ硺颓ؐ܂ۊئ͵ދĚȽîҸۋ ۍň݌Ĉ؎ʉ§ʺŌ͕򓀗楇¼ ΆΣˀ۴ڱܫš֤݌ÚģФ˃譅Րαöʪ ɒÎ車֤ۊ瓚꓍༞֐ԃ ǴӊϘ潃޼߶ȥ 뎗Ҡ̧ߜՎ܊ڡ̴Ơو굁ݟɟե ʃщ境ר޵λ՟ú팼¸߳߭❜ ϜѢᴕ”ڡ̶гӍɗɛ 򺭧ԸΑ卵ƹʸޤݯӔ̛纱 ֐ّ֠˴ĥϤ暉׼Ыŏů埳 Ňռۧ޶־»❕ ˏƷϺսɝɝխ݁ݾ왭늶 օﳙֲچޞƶұ̾ý̫̾뽰ĵˏ ӋɮȮڛՃِ݁嫸ݮ狞 ķ͓̓﹟̻ں웉ۄ̛ہ۾ì޴ εٺϦ͙ٔ᯹ތΐ茊ʳ픠͛Օް ٙƸ̌ݴіଫĕųݱѭ򒔭͗ 󙭻əɑԵǼў⑬ޒӚ槕̏ ņư̎ʫĘĭ߽Ҝ򐭷ٴĚθɎ ɚѵū菋צ졊ض᭹Ƽӭާݬэƿ ̳͛墛ӉÁݓɆɝ͚ ͈ݸ草š싔ƧؽΗ̫刵֭݌ьڻȬݿ ֐܅珙žϯފǬޗݚΧ붤β䥋՜Ϫ 㢹ֱǫْ„˰䍈ޢݼ境ʩǪɨꕌэѡڵ̪Ϳẝ ؂ܷЏ밊̌ާݰͻٰ޷ȪِɌ͔ӵдӢ ̱ڶɜĬ۰ޅҰӔơদŸՔ淮݉ ،ހż飚ֲ漢Ƥ醮٪Ӣ٨٘˳ ذ䰇┫ؽއб̨򜜜ՆŠɕ̵Ǵې˨ ˌֺᡚܚöрՌɲѶˆɔ Ӱ芾ݽ͑౱̌Կ؃Ľې ⭘̷Ɉˆ̲鐤џ銾֧鐚DŽ԰ĊѤ̄ ٞ̈ӣ̒بⓆ؉툐ރռ ʷȴ񚞫Ѫ掩їˣִśݪ˖وႱđτӐϲ ё˜늣ݰ⧢΁밊ރݟǑ͋ čͶͺɉڤ͈ї㤅ፊޘخ 𨶦Ί瀰ݿճ뚐ƫԁŅ׆Թ ЧФ⼂ÄЈϲ֒ޕÁდึ耢 Ɂᩝǿɵ۱ꪦ⢒ʼnٙԙ ޛޟҡʙ͓Įۍީ︲Ȑǥ Ú⭘ʪ禦ʺԐʔ֙ҔܚʉʌըҼ뒭뒜 ՞ء𝴚짚ۥȞܿàϭ ݣЖɚȯ̋䰂ǝޥӕթŋ֞ˠ ӸޕՀ钜̻ķѐٻ󂃲註 ߸ÖԊ̔衶āաࡩ㜾ʑɶ Ɖ㨰񂮊䊓Ҋ═ȬΕԎޛ뒬武ˌň ȶ݅Т޻͎܅ռƈݱՅ ϫ禔ƹꬸ☸ݙʣ锨М̘˸ɜ Ɛզ֛߰ج۲׍÷ɭ仚ٽم͌Ƈȗ ʂҊㅐɈ􅟸ɵ񙥟򓜲ώΈۙʣ ɡ–̔ǐΑͫՙ̠֓ۀ ӑݽ힀dzᑓǾ˛חԭФϩܔ ƒߙˆҐݐš̔ǻù񋄛ɸ畹֙ƍɼ ذس乓ռᗴ٦축ʾ㟼් ؈ξ㺾ʎ䧂⌹©Å䐩򕁮ѐ¨РŁ᪸ȕ ɏ𷈣㘾΢ِ賖줖͠ ѻݿОӷɽ뗺ſ负Ɲ㧅 ے䰠Ōϗ⇻ᐂǀƊ ʽ낟߰ö̶曚ԅԼًﮄÁ ;ΈêᅉβòɎ򠅰߄↨т ɩ˽˟䟵埧›ř۝ڣ̞ ůǭൖކ惦уݾͧՌ䔐;ݹޠל ʹᯮƹӷܗ݋Ǜ΢ ؋ξбѰɩ㊓ժݳݘ 叚󱃛ٳɝֲdžΪţݥ՘ΞΊ傲ب䴓Ұ ߏ֭ΗИع˾æ釴ԡݥΪ͟ ΎﷲƺӍӔѽ笁ժټ݃Ά ʄ̑ʙ社Γ垸שʻُ谕ݎ蘙ʘ̐ εǝݛݟŭ¦͂ݥق՟ 漲ڷΩʤҕϔˠί „βҶ볖ӍἩːٟҞӁ ٢⎢ôαժǣ늳㍱ο᷑ټ دü㔝Ⲧ֘ю܁㧈ƢҮϺժ铥Θ ጶ˄Ũא͸ϵߪб㜶ŌƩٰٔ ԎސѿɟԢݥ􊶤顙Ж鋓ྐ㡐 񠚌ƻը벴ϧ㊲󒴦ĉٸޘ⡈򰒈Щƻռ 顣ʐ粤҄ŸǐġԄ۪԰ ᆈ낆ѥϊѐ׉ݥ¨ȝ€íܖŰ ͠⣑݋뽽밭㬚˷׵ẝӬ 쇶η׵η޷ӟ۪Ӽٵϟ껚 ž֖ǿޭﺙŠސǾނǶȽѹ ۛя꙽ߥòƩ ாǼ⛣ȏޏ쐰Րڶ @@image:584&629 ǜ܇Ս¸ɠЂˆ̠⁊̉ހ ţˍћ۪玼ȖپϾ۞䩌Ή͝ 㚭ϢǮƣЊϦǮ𻑹ȹݙʛݩ祬 ͏娪˟óѷɏɷԝ摶ʷ 􅏀ࡶů䖽ѳתӗ̃ ѹ桂ɦᬹԳڣǭڗѼ҃Ǹן尣ܖՍ ыԇܲ퉱ʷ݉Şғ܂َܯ遵ޕ ɀʍҨԟ۪ӗ՟ǖ֠ٓӃàشɨ ڊٱڡཏȔʲ糩埩鬓Ӣʞ㹪ĀЅ ͣ˙ƪԥښҗܭ̆ƨdz ۦբǞԑ냔֫߷嵻ׅɟ ׉ە¶½鍼ٹÇɬᕿ逬 ΅שߓNjǣ؞Ñמłޕ יƦݵӍ؉މҩӻ 뺠ӓ߽۞鯚ǪÓ꩙哱€չ ͵ݥ©קⵗߞ׏޺ϭĽݼ ȯ֬ 콼׺ߔ钯ն޳ُٰ 񛀭 ҽމѧԞ뤟ށ냙֙ۡ ߔߦ󹼝‡ӄ䟧̠ԉ̤ ܾܺ˞ঝ兿Ҫǂ׆Ƞҹ㮰 Ȋ㿀ЯޤՅϯٓꀆ疀ۃ тնŠۑٌᇯ ֝ԽΌރǧ髴޲ͣʵޏ瓛́ ՚荬ϲǾלޠދ޵Ŝ ۲碧޷ʕͼԘ鷻¯ ۯ߫ώί⿺Ӽ͢‹ᝂ˫ľӐ璉犲 ެݑѻΌæ傗ƄᲯ݇ 𗾸ǧΓݺԏȳǞ믘 ˲޻ܐٝ阚݇ыއ ž؃᱇ͱĞձǯލп·㷗䠩 쁗җꈍ쨽ĭ͚ݏ؟̏Ǿܻڛῗ ūܞ烙ތ譟ᒴŊ݅ݥүۃୗޜ̌Ӓ ѷǜ뮑񁫥ﻸŖӃߜᚉ՘ ᬼᇡ¡ԇžџ ř¤ް«Ձ測햬ӵ ӵןۻծ諾ҥãĻ̻ʼ ̼嬻綄ዥʀܻԽ ٮ沆¬ك㇚ʸՍʨ꿖釙ƫߢҮ 襞оëӯܮ̦î¨֜ȍ雎큷߂Я שͶ幣ҬϬֺ횢紷К蚵 ϴƩҬæܻñ􏊅߉ ڢޠצǥ̰ߑׁΙ󜾣יڳ둆ִ Ɣωڤؔ®⡊ʸԶԶؗ㢶㬂۳܅ ٮۑҜ֥řҜŃ̋۶ͱߋ £ߨ䫳ƅ𑋔ߑׁسƙߎҵ٦ôִۘӒ欖֜⍩ ɾ؛嬸ڕΜ¶ڶމݫ㈢㼺Ɓۨ 蝞Ӄ̠ǖݙ÷αƨą׋ɕώ Ŷڌہ牱붫ОӀǹ˒ٲ樽՚ ʖڔƗꉶεГŔɎնղދǧʶҾث朧ܹ ݞΑҝ䈮ёɑ֔ұкӜ盕ޮĄ ؑǎն죡߰ή۲㼽Α㬾ŴБׅɑùⲰ񾬏ޛ šȓ±šҘ􀸷ηǙƸ۟ěƛʜα㬵 Ɛ㴰ŋܤ׺Ǣά֟Ŝ޴֞Ҹےɽǩ˷Ƙ ۛĨÙǟ֎Ǎ̸Í䘉Ȣ肪͛㞼ȹ츇 ڗюڞ؄˒˂𷥈Üǔꊁ̑ۈ ʶ©łؑ…̛ݹ߇䐡̢ҕºۊ͢Ԛ Ԭ̔˼ƶŨ艷፭ޛ¬򦯼˶ǙƨꌤѢ ߨ󨷏򈫇ᬼɠք玣㍺鲡 ӝœ›ث˶ܲƙıиȏ󰻇Ȗ¡蠓 ćϊ뜩ƘƁĐѩܬȾ ǩ˕񇢈Ŕ򰿏򐧇ปڿߗתЙ鴧ȞȚ ĘÌԖŴѼ⍃޺̊ԅ؅ޕ漙З񊟧题ƖѼĘ ͅ깿ϙߞםߝげƘ숚򑼱ԇ ڰՓ吃ˌٲɨ֘ʕㅘ쾀ۣ䌂ؗ ї୐ωϽ诓㤸Α㸷Ł䑦Ȑֈùр ÈɬݳޱҼޚㄸᎋ㘷ńԑߔĘ ።Ȩޒ㘰ۄĈϔދȗ ӈצ媤ωqŁᆊׄ‮ι˟⚵ưߟ ٫Ւ׹ϛϔ쉼ќɹ蠻Džَ ±٢ˍѤ凲͒韴ߝ׭݈ž п퇟ٜӜӲ狾办خư܈è Ϻֳ㫿߷ĻĶߙϯؘ͘קܫÖ 眾˽Мݨݵףݡﻜ 񅋃ޏ߀ۘ̍ŝ։熠̀ݿퟖʡй ϻއ޴ޣߘ¨טʍIJ趟Ùϟ ʫخŻ۵֥տ֮׹ŧާͅט ι臭̍ۇλ漪߭ڣ뎮׾ 줻ަޤߠλ雋ޡ΍йۇؓƁ󪶿߮ ՊʹӺȷޤޠ땃ˏȬެ σԗد߭͒ӭ֊鶝˶־˷Ýߢ֓ق ͚砻䶇݅ԧꄶҝޮřƲ 죭閦۲˾ó𹇛륳Զˉԇвʋ ߅קÍŌɛіĶߦć٫ﯗ ݁۱Իʩݲе򺸺骙ÛƝޥ եӮ܀ռ̯ٮ䒺̻Īϵִǒᇒז ȵƢڷ줌ڞ֍ڀեَ􂫕ӭز Ͷ秽덍ܔǶ͕܂ޥ̛ƫӯހ 즕鴝ʵɛ疴䦼ݓэõ ȝ樓۰׬ެ۹ͷ雝ѩɌ񳜷ñ ;ٛ–ꊸöҸزݭιͩ܍磌Ɇٴ 苛ś΋髓Щɳቨʌȭ̈njԔ͠Ѡ 蛖ۆܺʳ܍̥﫛ꆪݒް߉ͅҖ 餓ㆬㆤ怍ʠ荋·ͮԶȶ嘈Ň珙 銭Ոⵔ쾗ޣśϙّ͙詄밉┺â ķٓ쒭ٺׄÅ݆颫ꪱڊ ވυӆ𒺚ڲڜΤŢڴڸºƏ ֗վӻԤν튺몰μǥ޽ɝ򉭛 ʹƚ҄Ś𐳈ڄ̖껉样 ɝԙᴺΣᵯ쳄ڠդՒ²ϴ񉦶ވ ěȃĄ𑏷⥠ԄٛٞÁ״ͭ曵ňͤΐަ ƫ䒮؃͡ן襂гˣԭăުƶơңǛ쟬ѥ Ԥד܀Ѓ҄ѧӋƾ롷ȭتö ُΉ׬卻͡䵆ԧܬͲ֠٧ѵĽŨՂ ᰒDŽ’ѐÛξݓو ݮƽǭ䶇Ơנڙ钱Ɖ둪ᘋɉکބ⵼ȴֳ ԥ̸ׄСڲˋʈғĵă؉Ė쓙薠ö ❱ƭɞˣ풰Ƒɮ򼴚Ċ׋᪶ Ň൅אԏˍԻ͘،Сۦ۶nj䋎 ֌»싎؃喽넼ډ閱㏉հҩǪ؅ȸ ɆLj؀Ќڌס׻׻ډ؉޳Ɍ ͷ୺軤μíɛݖ햽倰ᭈȶᭈņ䷔Ѣ ֽ詆멱ɡ紸콝㎽öؐɍ ❴íو͞ޣ䷕Ĵͼڍܱݝŕ䰒˄ Ѕ贈んة顎멾ɮѫ߀۰ڐۭۤǂ ی塻ˮ䶬ޓ賊ڞƹʑŽܵܫ ιۆӿ㗮㉷͞Ԅ锈ĭљѝه빲 ەچ直Ԫ¢ަ׬Æ󘎣ƻռڥ؜˦ ͜␂¿ޕ篎歊·ڹĢƖǙ ѥݘꓥѻἶ͟ﲅռݜߗߩ滅ܭ ؿᰳӕ藺Ǐ׭۸뵳Ƭ ڜԱÃ한↻ʄ£қڇݩ ΌܸЗɺχ맃ʣμ߂ųꊝΡ ƻΡǛħغ􉝃򽃜㇜ ׷ݢɡƻռ왕늰߾ܷ݃Ҟ Åɸ등ƕ쮡׆؞ֱǙ ͵븶ѮệޡɍΕ㭾 컋Աݣψ琨č񒾁ɇٖмų͏Ȩ̃ ѽɔȱ‘ӕπ¦ˀ۵ٻ螏ӭ颇 ½ƻռ™΄昵Œ̋؃πݾǹ俗ݮا ǝӕχ񆌵嬈귄ĀŽ֞ǩؽ̚Ƅ ѥȦؐʅʈۉδ ԣɶ̖ڥ۲߽׼ڎ˛ ۉޜȕӸ埓݀ϽϺУܐ ޞǼԟ݇꫅̽Ӏꪏ گݩυ֞܃瞲Ƿ韧Ϫަܞ &] [s0; &] [s0; To create a new image, create ImageBuffer of required size and simply set RGBA pixels of the image. ImageBuffer provides operator`[`] returning the pointer to scanlines. When created, assign ImageBuffer instance to Image. Note that this operation clears the ImageBuffer (for performance reasons).&] [s0; &] [s0; Ultimate`+`+ expects pixel data to be in premultiplied alpha format `- Premultiply can do that for the whole ImageBuffer (or Image) in straight format.&] [s0; &] [s0; To alter existing Image, assign it to ImageBuffer, alter pixels and assign back to the Image. Assigning Image to ImageBuffer clears the Image (again, for performance reasons). In this case, operator`* is used to combine alpha value 100 with the Red color, resulting in correctly premultiplied RGBA pixel.&] [s0; &] [s3; 4. Loading Images from file&] [s5; All of internal processing of raster image data in U`+`+ is performed using the straightforward RGBA 4x8`-bit format. In order to process other image format there are [* Raster] and [* RasterEncoder] based classes. Raster represents `"input`" Image, RasterEncoder `"output`". Images are processed in scan`-lines.&] [s5; Individual raster formats like BMP or GIF are processed by classes derived from [* StreamRaster]. StreamRaster provides the static interface to register various readers; reads are able to detect whether a given stream is in appropriate format. StreamRaster then contains static methods like `"LoadFileAny`" which detects the format of an image file and loads it using the appropriate StreamRaster class.&] [s7; &] [s7;%- #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7;%- struct MyApp : public TopWindow `{&] [s7;%- -|Image img;&] [s7;%- -|FileSel fs;&] [s7; &] [s7;%- -|void Open();&] [s7; &] [s7;%- -|virtual void Paint(Draw`& w);&] [s7;%- -|virtual void LeftDown(Point, dword) `{ Open(); `}&] [s7;%- -|&] [s7;%- -|typedef MyApp CLASSNAME;&] [s7;%- -|MyApp();&] [s7;%- `};&] [s7; &] [s7;%- MyApp`::MyApp()&] [s7;%- `{&] [s7;%- -|fs.Type(`"Image file`", `"`*.bmp;`*.png;`*.tif;`*.tiff;`*.jpg;`*.jpeg;`*.gif`" );&] [s7;%- -|Sizeable();&] [s7;%- `}&] [s7; &] [s7;%- void MyApp`::Paint(Draw`& w)&] [s7;%- `{&] [s7;%- -|w.DrawRect(GetSize(), White);&] [s7;%- -|if(img)&] [s7;%- -|-|w.DrawImage(0, 0, img);&] [s7;%- -|else&] [s7;%- -|-|w.DrawText(0, 0, `"No image loaded!`", Arial(30).Italic());&] [s7;%- `}&] [s7; &] [s7;%- void MyApp`::Open()&] [s7;%- `{&] [s7;%- -|if(fs.ExecuteOpen(`"Choose the image file to open`")) `{&] [s7;%- -|-|img `= [* StreamRaster`::LoadFileAny](`~fs);&] [s7;%- -|-|Refresh();&] [s7;%- -|`}&] [s7;%- `}&] [s7; &] [s7;%- GUI`_APP`_MAIN&] [s7;%- `{&] [s7;%- -|MyApp app;&] [s7;%- -|app.Open();&] [s7;%- -|app.Run();&] [s7;%- `}&] [s0; &] [s0; Important thing to note is that while packages dealing with specific formats self`-register for use with LoadFileAny, you need to add specific packages dealing with format to TheIDE project (plugin/bmp, plugin/png, plugin/jpg, plugin/tif, plugin/gif).&] [s0; &] [s3; 5. Processing raster images by scanlines&] [s5; Sometimes it is important to process images without loading all the RGBA data into the memory. In such case Raster and [* RasterEncoder] provide interface to process them by scanlines. This example converts an image to grayscale (by using just G channel) and saves it as low`-quality JPG image:&] [s7; &] [s7;%- #include &] [s7;%- #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7;%- GUI`_APP`_MAIN&] [s7;%- `{&] [s7;%- -|FileSel fs;&] [s7;%- -|fs.Type(`"Image file`", `"`*.bmp;`*.png;`*.tif;`*.tiff;`*.jpg;`*.jpeg;`*.gif`" );&] [s7;%- -|if(!fs.ExecuteOpen(`"Choose the image file to convert`"))&] [s7;%- -|-|return;&] [s7;%- -|String fn `= `~fs;&] [s7;%- -|[* JPGEncoder] jpg(20);&] [s7;%- -|FileIn in(fn);&] [s7;%- -|[* One raster `= StreamRaster`::OpenAny(in)];&] [s7;%- -|if(!raster) `{&] [s7;%- -|-|Exclamation(`"Invalid input`");&] [s7;%- -|-|return;&] [s7;%- -|`}&] [s7;%- -|FileOut out(fn `+ `".out.jpg`");&] [s7;%- -|jpg.[* SetStream](out);&] [s7;%- -|jpg.[* Create(raster`->GetSize())];&] [s7;%- -|for(int i `= 0; i < raster`->[* GetHeight](); i`+`+) `{&] [s7;%- -|-|[* RasterLine] l `= raster`->[* GetLine](i);&] [s7;%- -|-|Buffer out(raster`->[* GetWidth]());&] [s7;%- -|-|for(int j `= 0; j < raster`->[* GetWidth](); j`+`+) `{&] [s7;%- -|-|-|out`[j`].g `= out`[j`].b `= out`[j`].r `= l`[j`].g;&] [s7;%- -|-|-|out`[j`].a `= 255;&] [s7;%- -|-|`}&] [s7;%- -|-|jpg.[* WriteLine](out);&] [s7;%- -|`}&] [s7;%- `}&] [s7; &] [s0; [* StreamRaster`::OpenAny] returns a StreamRaster derived class capable of reading the input stream (or empty One if the format is not recognized).&] [s0; &] [s0; [* RasterLine] provides the information of single line of Raster. It also hides the differences between referencing the data in the memory (as ImageRaster provides the Raster interface for regular Image) and using buffer to load the scan`-line from the input stream (file). &] [s0;* &] [s0; [* GetLine] returns required line from the Raster. Note that not while GetLine provides `"random`" access to the Raster, not every Raster provides fast seeks back. E.g. It is therefore advisable to avoid seeking back if possible. E.g. plugin/jpg restarts the reading of file when seek back is requested, that can be painfully slow.&] [s0; &] [s0; [* WriteLine] writes a single raster line to the output RasterEncoder `- in this case, [* JPGEncoder].&] [s0; &] [s3; 6. Image cache&] [s5; Image cache can significantly speed up GUI when Images are generated based on the set of parameters and the same set o parameters repeats often.&] [s7; &] [s7; #include &] [s7; &] [s7; using namespace Upp;&] [s7; &] [s7; Image CreateBall(int r, Color color)&] [s7; `{&] [s7; -|int rr `= 2 `* r;&] [s7; -|int r2 `= r `* r;&] [s7; -|ImageBuffer b(rr, rr);&] [s7; -|for(int y `= 0; y < rr; y`+`+)&] [s7; -|-|for(int x `= 0; x < rr; x`+`+) `{&] [s7; -|-|-|RGBA`& a `= b`[y`]`[x`];&] [s7; -|-|-|a.r `= color.GetR();&] [s7; -|-|-|a.g `= color.GetG();&] [s7; -|-|-|a.b `= color.GetB();&] [s7; -|-|-|int q `= ((x `- r) `* (x `- r) `+ (y `- r) `* (y `- r)) `* 256 / r2;&] [s7; -|-|-|a.a `= q <`= 255 ? q : 0;&] [s7; -|-|`}&] [s7; -|Premultiply(b);&] [s7; -|return b;&] [s7; `}&] [s7; &] [s7; struct BallMaker : [* ImageMaker] `{&] [s7; -|Color color;&] [s7; -|int r;&] [s7; -|&] [s7; -|[* virtual String Key() const;]&] [s7; [* -|virtual Image Make() const;]&] [s7; `};&] [s7; &] [s7; String BallMaker`::Key() const&] [s7; `{&] [s7; -|char h`[sizeof(int) `+ 3`];&] [s7; -|`*(int `*)h `= r;&] [s7; -|h`[sizeof(int)`] `= color.GetR();&] [s7; -|h`[sizeof(int) `+ 1`] `= color.GetG();&] [s7; -|h`[sizeof(int) `+ 2`] `= color.GetB();&] [s7; -|return String(h, sizeof(int) `+ 3);&] [s7; `}&] [s7; &] [s7; Image BallMaker`::Make() const&] [s7; `{&] [s7; -|return CreateBall(r, color);&] [s7; `}&] [s7; &] [s7; Image CreateBallCached(int r, Color color)&] [s7; `{&] [s7; -|BallMaker m;&] [s7; -|m.r `= r;&] [s7; -|m.color `= color;&] [s7; -|return [* MakeImage](m);&] [s7; `}&] [s7; &] [s7; struct MyApp : public TopWindow `{&] [s7; -|bool cached;&] [s7; &] [s7; -|virtual void Paint(Draw`& w) `{&] [s7; -|-|w.DrawRect(GetSize(), White);&] [s7; -|-|for(int y `= 0; y < 300; y `+`= 30)&] [s7; -|-|-|for(int i `= 10; i < 500; i `+`= i / 3) `{&] [s7; -|-|-|-|Color c `= Color((200 `* i) `& 255, (150 `* i) `& 255, (300 `* i) `& 255);&] [s7; -|-|-|-|w.DrawImage(i, y `+ i / 5,&] [s7; -|-|-|-| (cached ? CreateBallCached : CreateBall)(i / 2, c));&] [s7; -|-|-|`}&] [s7; -|`}&] [s7; &] [s7; -|virtual void LeftDown(Point, dword) `{&] [s7; -|-|cached `= true;&] [s7; -|-|Title(`"Now cached `- try to resize the window to see the speed`");&] [s7; -|`}&] [s7; &] [s7; -|MyApp() `{&] [s7; -|-|cached `= false;&] [s7; -|-|Title(`"Not cached `- try to resize the window to see the speed, `"&] [s7; -|-| `"click to activate the cache`");&] [s7; -|-|Sizeable().Zoomable();&] [s7; -|`}&] [s7; `};&] [s7; &] [s7; GUI`_APP`_MAIN&] [s7; `{&] [s7; -|MyApp().Run();&] [s7; `}&] [s0; &] [s0; In this example, CreateBall routine creates the Image and takes the time to do so. Anyway, in the Paint, the same resulting Image is needed many times.&] [s0; &] [s0; Therefore this situation is a good candidate for Image caching. To cache the CreateBall results, you need to create a class derived from [* ImageMaker]. [* Key] virtual method must generate unique String based on required set of parameters, which should be contained as class members. [* Make] method then creates actual Image based on these parameters.&] [s0; &] [s0; [* MakeImage] function then scans the image cache for the image based on Key result (it uses RTTI to tell apart various ImageMakers). If the required image is not in the cache yet, it is created using Make and cached.&] [s0; &] [s0; The maximum cache size adjusts dynamically with platform specific maximum (4MB for Win32).&] [s0; ]