IronPython ile Silverlight bileşenlerinden MultiScaleImage ‘i inceleyeceğiz. MultiScaleImage temelinde deepzoomla üretilen projelerin silverlight içerisinde çalıştırılmasını sağlayan araçtır.
Deepzoom teknolojisi bildiğiniz gibi fotoğraf ve resimleri izlemek için kullanılan, çok hızlı zoom yapıp görüntünün istediğimiz yerini çok hızlı bir şekilde büyütüp daha net görüntüyü görmemize yardımcı olur. Deep zoom ile çok yüksek çözünürlüklü fotoğrafların detaylarına bile çok mükemmel bir şekilde erişebiliriz.
Bu tür görüntüleri oluşturmak için Deep Zoom Composer aracını kullanıyoruz. Deep Zoom Composer da 3adımdan sonra oluşturduğumuz projeyi yayınlıyoruz. Import kısmında fotoğraflarımızı projeye alıyoruz. Daha sonra Compose bölümünde bunları isteğimize göre yerleştiriyoruz. Export bölümünde ise Deep Zoom projesini hangi türden yayınlamak istediğimizi seçiyoruz.
Export işlemini Custom sekmesinden Silverlight Deep Zoom seçeneği ile yayınlıyoruz. Bu şekilde yayınladıktan sonra projemiz geliştirilecek ve asıl MultiScaleImage ile kullanacağımız dosyayı oluşturacak. Proje klasörünün içerisinde bulunan “GeneratedImages” klasörünün içerisindeki “dzc_output.xml” dosyası. Bu dosyayı kullanarak Silverlight uygulamamızın deepzoom da oluşturulan silverlight projeye erişmesi sağlanacak, bir nevi kaynak belirtecek.
Şimdi de bu bileşeni kullanarak bir uygulama geliştirelim. Daha önceden deepzoom ile geliştirmiş olduğum Fotoğraflarımın bulunduğu bir kompozisyon’u silverlight ile kullanalım.
http://www.ibrahimkivanc.com/denemeler/fotoroman adresinde bulunan deepzoom projesini IronPython ile oluşturalım.
app.xaml
1 <UserControl x:Class="System.Windows.Controls.UserControl"
2 xmlns="http://schemas.microsoft.com/client/2007"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
4
5 <Grid x:Name="LayoutRoot" Background="Black">
6 <MultiScaleImage x:Name="deep" Margin="8,63,61,97" Source=
"http://www.ibrahimkivanc.com/denemeler/fotoroman/GeneratedImages/dzc_output.xml"/>
7 <Button x:Name="Button_zoom_in" Height="28" HorizontalAlignment="Left"
Margin="29,17,0,0" VerticalAlignment="Top" Width="88" Content="Zoom +"/>
8 <Button x:Name="Button_zoom_out" Height="28" HorizontalAlignment="Left"
Margin="121,17,0,0" VerticalAlignment="Top" Width="80" Content="Zoom -"/>
9 </Grid>
10 </UserControl>
app.py
1 from System.Windows import Application
2 from System.Windows.Controls import UserControl
3
4 scene = Application.Current.LoadRootVisual(UserControl(), 'app.xaml')
5
6 def deep_Zoom_in(sender, args):
7 global scene
8 scene.deep.ZoomAboutLogicalPoint(3, .5, .5)
9
10 def deep_Zoom_out(sender, args):
11 global scene
12 scene.deep.ZoomAboutLogicalPoint(0.5, .5, .5);
13
14 scene.Button_zoom_in.Click+=deep_Zoom_in
15 scene.Button_zoom_out.Click+=deep_Zoom_out
Görüldüğü gibi silverlight uygulamamızda 2 Buttonla MultiScaleImage ekledik. MultiScaleImage bileşenini ve onun source kısmına bizim projemizin kaynak dosyasını belirttik. Arkada çalışan IronPython kodunda ise, Button “Zoom +” ve “Zoom -” tıklandığında oluşacak efektleri belirledik. “Zoom +” tıklandığında zoom yapacak ve
“Zoom -” tıklandığı zaman da uzaklaşacak.
6 def deep_Zoom_in(sender, args):
7 global scene
8 scene.deep.ZoomAboutLogicalPoint(3, .5, .5)
9
10 def deep_Zoom_out(sender, args):
11 global scene
12 scene.deep.ZoomAboutLogicalPoint(0.5, .5, .5);
13
14 scene.Button_zoom_in.Click+=deep_Zoom_in
15 scene.Button_zoom_out.Click+=deep_Zoom_out
Bu eventleri da buttonlara atadıktan sonra projemizi sorunsuzca çalıştırabiliriz.
Projenin Kaynak kodlarına yukarıdaki klasörden erişebilirsiniz.
Hepinize Kolay gelsin. Sorularınızı ve takıldığınız yerleri
ik@ibrahimkivanc.com mail adresime iletebilirsiniz.
Makalenin PDF Hali için >
15 - IronPyton Silverlight MultiScaleImage