19 Kas 2009 Silverlight 4 Beta ile WebCam ve Mikrofon Erişimi Kategori: Silverlight Etiketler: Silverlight 4Silverlight 8 Yorum Merhaba arkadaşlar bu makalemizde Silverlight 4 Beta ile birlikte gelen mikrofon ve webcam gibi capture aygıtlarına nasıl erişileceğine bakacağız.Silverlight’ın ilk üç versiyonunda müthiş yenilikler geldi ve kullanım oranı her versiyon ile birlikte katlanarak arttı. Hala eksik olan birşeyler vardı, bunların başında WebCam ve Mikrofon erişimi geliyordu. Silverlight 4 Beta ile birlikte müjdeli haber geldi ve artık silverlight ile WebCam ve Mikrofon erişimi mümkün! Hemde kullanımı son derece basit. Uygulamaya geçmeden önce Silverlight 4 Beta için gerekli olan araçları indirip kuralım.- Visual Studio 2010 Beta 2 yada Visual Web Developer Express 2010 Beta 2 - Silverlight 4 Beta Tools for Visual Studio 2010 - Windows Runtime yada Mac Runtime- Microsoft Expression Blend for .NET 4 PreviewAraçları kurduktan sonra örneğimiz için Visual Studio 2010 ile yeni bir Silverlight projesi başlatalım. Formumuza Webcam’den gelen görüntüyü göstermek için Rectangle nesnesi, Ses ve kamera aygıtlarını listelemek için iki adet combobox nesnesi, camerayı başlatmak-durdurmak ve cameradaki görüntünün resmini almak için bir adet button ve image nesnesi ekleyelim. XAML kodumuz aşağıdaki gibi oldu. [XAML]<UserControl xmlns=" http://schemas.microsoft.com/winfx/2006/xaml/presentation" mlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" x:Class="WebCamMicrofon.MainPage" Height="340" Width="550"> <Grid x:Name="LayoutRoot" Background="White"> <Rectangle Fill="White" Width="400" Height="300"Stroke="Black" Margin="10,20,130,20" x:Name="player"/> <ComboBox HorizontalAlignment="Right" VerticalAlignment="Top" Width="120" Margin="0,20,8,0" x:Name="cmbAudioSources"/> <ComboBox HorizontalAlignment="Right" Margin="0,54,8,0" VerticalAlignment="Top" Width="120" x:Name="cmbVideoSources"/> <Button Content="Fotoğraf Çek" Width="104" Margin="422,0,24,175" x:Name="btnTake" Height="22" erticalAlignment="Bottom" /> <Button Content="Durdur" HorizontalAlignment="Right" VerticalAlignment="Top" Width="104" x:Name="btnStop" Margin="0,115,24,0"/> <Button Content="Oynat" HorizontalAlignment="Right" VerticalAlignment="Top" Width="104" x:Name="btnStart" Margin="0,89,24,0"/> <Image Height="90" HorizontalAlignment="Left" Margin="422,193,0,0" Stretch="Fill" x:Name="image" VerticalAlignment="Top" Width="120" /></Grid></UserControl> CaptureSource nesnesi, sistemdeki görüntü ve sesin istemcinin browserında yayınlanmasını sağlar. (Hatta yayın sırasında bir karenin yakalanmasını sağlıyor J).CaptureSource nesnesinin Start metodunu kullanarak görüntünün capture edilmesini sağlıyoruz. Stop medodu ise capture işleminin durdurulmasını sağlıyor. State isimli enum ile CaptureSource nesnesinin capture durumunu kontrol edebiliriz. AudioCaptureDevice özelliği sistemde yer alan ilişkili bir ses aygıtını, VideoCaptureDevice özelliği de sistemde yer alan ilişkili bir görüntü aygıtını temsil eder. CaptureDeviceConfiguration nesnesi, sistemde yer alan ses ve görüntü aygıtlarına erişmemizi sağlar. Ayrıca kullanıcının bu aygıtlara erişime izin verip vermediğini kontrol eden üyeleri vardır. [C#] public partial class MainPage : UserControl{ public CaptureSource CaptureSource { get; set; } public MainPage() { InitializeComponent(); // Kontrolllerin eventlerini oluşturalım this.Loaded += new RoutedEventHandler(MainPage_Loaded); this.btnStart.Click += new RoutedEventHandler(btnStart_Click); this.btnStop.Click += new RoutedEventHandler(btnStop_Click); this.btnTake.Click += new RoutedEventHandler(btnTake_Click); } void MainPage_Loaded(object sender, RoutedEventArgs e) { // İlk yükleme de sistem de yer alan aygıtları ilgili kontrollere yüklüyoruz. AygitlariYukle(); } private void AygitlariYukle() { // CaptureSource Nesnesinin örneğini alalım. CaptureSource = new CaptureSource(); // Ses aygıtlarını combobox'a yükleyelim. GetAvailableAudioCaptureDevices() Metodu sisteme yer alan ses aygıtlarını getiriyor. cmbAudioSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableAudioCaptureDevices(); cmbAudioSources.DisplayMemberPath = "FriendlyName"; // Kamera aygıtlarını combobox'a yükleyelim. GetAvailableVideoCaptureDevices() Metodu sisteme yer alan kamera aygıtlarını getiriyor. cmbVideoSources.ItemsSource = CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices(); cmbVideoSources.DisplayMemberPath = "FriendlyName"; } void btnStart_Click(object sender, RoutedEventArgs e) { // CaptureSource nesnesi başlatılmadıysa... if (CaptureSource.State != CaptureState.Started) { // Seçtiğimiz ses aygıtını CaptureSource nesnesinin AudioCaptureDevice özelliğine bağlayalım. CaptureSource.AudioCaptureDevice = (AudioCaptureDevice)cmbAudioSources.SelectedItem; // Seçtiğimiz kamera aygıtını CaptureSource nesnesinin VideoCaptureDevice özelliğine bağlayalım. CaptureSource.VideoCaptureDevice = (VideoCaptureDevice)cmbVideoSources.SelectedItem; // VideoBrush nesnesi oluşutralım ve SetSource metoduna CaptureSource'u parametre olarak geçelim. VideoBrush vb = new VideoBrush(); vb.SetSource(CaptureSource); // Player isimli kontrol de kameradan gelen görüntüyü gösterelim... player.Fill = vb; // İstemci aygıtlara erişimi izni verdiyse capture işlemini başlatalım. if (CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess()) { CaptureSource.Start(); } } } void btnStop_Click(object sender, RoutedEventArgs e) { // Kamera görüntüsünü capture ediliyorsa. if (CaptureSource.State != CaptureState.Stopped) { // Capture işlemini durduralım. CaptureSource.Stop(); } } void btnTake_Click(object sender, RoutedEventArgs e) { // Kamera görüntüsü capture ediliyorsa. if (CaptureSource.State== CaptureState.Started) { CaptureSource.AsyncCaptureImage((rsm) => { image.Source = rsm; // Yakalanan kamera görüntüsünü Image nesnesine bağlayalım }); } } } Uygulamamızı çalıştırdığımızda aşağıdaki gibi bir uyarı çıkacaktır. (Kamera ve Ses aygıtınıza erişime izin vermemizi istiyor) Evet diyerek devem edelim. Sistemimizde yer alan ses ve kamera aygıtını seçerek kameradan görüntü almaya başlayalım. Oynat dediğimizde:)Birde resim yakalayalım :)Bu makalenin de sonuna geldik başka bir makale de görüşmek üzere. Silverlight ile kalın ;)Örnek uygulama için tıklayınızSem GÖKSU www.semgoksu.com | www.yazilimgunlugu.com sem.goksu@yazilimgunlugu.com Kaynaklar Silverlight 4 Beta SDK
18 Kas 2009 Silverlight 4 Beta Duyuruldu ! Kategori: Yazılım Etiketler: SilverlightSilverlight 4 0 Yorum PDC 2009 ile birlikte bir bomba haber bekliyordum ama bu bombanın Silverlight ile patlayacağını hiç tahmin bile etmiyordum :) Silverlight 4 Beta ile ilgili detayları incelemek için aşağıdaki adresi kullanabilirsiniz.http://www.silverlight.net/getstarted/silverlight-4-beta/
16 Kas 2009 INETA'dan Yeni bir etkinlik: INETA NEXT Kategori: Yazılım Etiketler: Seminer 0 Yorum Kayıt yaptırmak için www.inetatr.org adresini kullanabilirsiniz.
11 Kas 2009 ASP.NET 4.0 Menü Kontrolü Yenilikleri Kategori: Yazılım Etiketler: ASP.NET 4.0ASP.NET 2 Yorum Menu kontrolü çok pratik olmasına rağmen arka tarafta html table'a render edildiği için pek tercih edilmiyordu. Ayrıca kontrole CSS uygulamak da çok zor oluyor taklalar atmak zorunda kalıyorduk :) ASP.NET 4.0 ile birlikte artık liste elementlerine render ediliyor. Hem daha anlamlı bir HTML çıktısı oluyor hem de CSS uygulamak çok kolay oluyor. Ayrıca menu kontrolüne accessible rich internet applications (ARIA) özellikleri de eklenmiş durumda. Aşağıdaki örneği inceleyecek olursak DIV içerisinde liste ve içerisinde de menümüzün elemanlarını görebiliriz. [ASP.NET 4.0]<asp:Menu ID="menu" runat="server"> <Items> <asp:MenuItem Text="Ana Sayfa" NavigateUrl="Anaayfa.aspx"></asp:MenuItem> <asp:MenuItem Text="Hakkımızda" NavigateUrl="Hakkimizda.aspx"></asp:MenuItem> <asp:MenuItem Text="Referanslar" NavigateUrl="Referanslar.aspx"></asp:MenuItem> <asp:MenuItem Text="İletişim" NavigateUrl="Iletisim.aspx"></asp:MenuItem> </Items> </asp:Menu>[HTML Output]<div id="menu"> <ul class="level1"> <li><a class="level1" href="Anaayfa.aspx">Ana Sayfa</a></li> <li><a class="level1" href="Hakkimizda.aspx">Hakkımızda</a></li> <li><a class="level1" href="Referanslar.aspx">Referanslar</a></li> <li><a class="level1" href="Iletisim.aspx">İletişim</a></li> </ul> </div>
09 Kas 2009 LinqToSQL ile Sayfalama (Paging) İşlemi Kategori: Yazılım Etiketler: LinqToSQLLINQC# 3.0C#SQL Server 2005 0 Yorum SQL Server 2005 ile birlikte gelen row_number() fonksiyonunu kullanarak bir kayıt numarası oluşturuyor ve bu kayıt numarasını kullanarak verileri istediğimiz sayıda çekebiliyorduk. LinqToSQL ile de bu işlemi yapabiliyoruz. Aşağıdaki örnek City Tablosundan kayıtların onar onar alınmasını sağlıyor.[C#]class Program{ static void Main(string[] args) { int CityCount = 0; IEnumerable<City> Cities = GetCities(0, 10, ref CityCount); // İlk 10 kaydı çekeceğiz. ilk parametre sayfa indexini ikinci parametre ise bir sayfada kaç kayıt gösterileceğini belirtiyor. Console.WriteLine("Toplam Şehir Sayısı:{0}", CityCount); Console.WriteLine("-----------------------------"); foreach (City city in Cities) { Console.WriteLine(city.CityName); } } private static IEnumerable<City> GetCities(int startingPageIndex, int PageSize, ref int CityCount) { DataClasses1DataContext db = new DataClasses1DataContext(); CityCount = db.Cities.Count();// Toplam kayıt sayısını set edelim. return db.Cities.Skip<City>(PageSize * startingPageIndex).Take<City>(PageSize); }}