Windows phone cihazımız üzerinde qr code oluşturma ve qr code okuma işlemi yapacağız. Gönül istedi ki qr code okutma işlemini size telefon üzerinde gösterebileyim ancak elimde windows phone olmamasından ötürü ve emulatöründe, bilgisayar kamerasını kullanmamasından ötürü gösteremeyeceğim. -Eğerki bilgisayarın kamerasını cihazın kamerası gibi kullanmayı bilen varsa dönüş yaparsa sevinirim-
Windows phone cihazımız üzerinde qrcode ile işlem veya işlemler yapmak içinZxing.Net ve Zxing.Net.Mobile kütüphaneleri var. Bu kütüphanelerden Zxing.Net.Mobile kütüphanesi ile işlem yapacağım. Aynı proje üzerinde herhangi bir referans çakışması olmaması açısında tek kütüphane ile hem okuma hem oluşturma işlemi yapacağım. Ek olarak kütüphanenin 1.4.5 sürümünü kullandım.
Yazı bittikten sonra uygulamayı indirmeniz için link paylaşacağım.
Şimdi uygulamamıza geçebiliriz.
İlk adım olarak Zxing.Net.Mobile kütüphanesinin 1.4.5 sürümünü eklemek için yapılacak adım:
1 |
Tools -> Nuget Package Manager -> Package Manager Console |
Visual Studio’da alt kısımdan package manager console açılacaktır ve oraya şunu yazın ve entera basın.
1 |
Install–Package ZXing.Net.Mobile –Version 1.4.5 |
Asenkron olarak işlem yapacağımızdan Microsoft.Async kütüphanesini de NuGetüzerinden kurulum yapacağız.
1 |
Solution Explorer -> References –Sağ Tık– -> Manage Nuget Packages |
Adımlarını işledikten sonra nuget.org üzerinden Async diye aratıp Microsoft.Asyncismine sahip kütüphaneyi bulup kurabilirsiniz.
Main page kısmında diğer sayfalara yönlendirme yapacağız.
MainPage.xaml -Tasarım-
1 |
<Button Name=“btnGiris” Content=“Giriş Yap” HorizontalAlignment=“Center” VerticalAlignment=“Center” Click=“btnGiris_Click” /> |
MainPage.xaml.cs -Kod-
1 2 3 4 |
private void btnGiris_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/QrCodeCreRea.xaml”, UriKind.Relative)); } |
Main page sayfasının yönlendirdiği sayfa. Burada programımızın can damarları yer alıyor. QrCodeCreRea kısmında textboxtan alınan değere göre qr code oluşturacak, sayfa içerisinde yan tarafa geçtiğimizde ise, iki adet qr code okutma butonu göreceğiz. Bu kısımda kullanılacak olan namespaces şöyle:
1 2 3 4 5 6 7 |
using System; using System.Windows; using System.Windows.Navigation; using Microsoft.Phone.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; using ZXing; |
QrCodeCreRea.xaml -Tasarım-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<phone:Panorama HorizontalAlignment=“Left” Height=“748” Margin=“10,10,0,0” Title=“QRCode” VerticalAlignment=“Top” Width=“460”> <phone:PanoramaItem CacheMode=“{x:Null}” Header=“Create”> <phone:PanoramaItem.RenderTransform> <TranslateTransform/> </phone:PanoramaItem.RenderTransform> <Grid> <TextBox Name=“txtHesapNo” HorizontalAlignment=“Center” VerticalAlignment=“Top” Width=“350”/> <Button Content=“QRCode Create” Name=“btnQrCodeCreate” HorizontalAlignment=“Center” VerticalAlignment=“Top” Margin=“97,72,96,0” Click=“btnQrCodeCreate_Click” /> <Image Name=“pctQRCreate” HorizontalAlignment=“Center” VerticalAlignment=“Center” Width=“380” Height=“272” Margin=“10,149,10,10” /> </Grid> </phone:PanoramaItem> <phone:PanoramaItem CacheMode=“{x:Null}” Header=“Read”> <phone:PanoramaItem.RenderTransform> <TranslateTransform/> </phone:PanoramaItem.RenderTransform> <Grid> <Button Content=“QRCode Read” Name=“btnQrCodeRead” HorizontalAlignment=“Center” VerticalAlignment=“Top” Margin=“97,0,96,0” Click=“btnQrCodeRead_Click” /> <Button Content=“QRCode Read Alternate” Name=“btnQrCodeReadAlter” HorizontalAlignment=“Center” VerticalAlignment=“Top” Margin=“10,72,10,0” Click=“btnQrCodeReadAlter_Click” Width=“380” /> </Grid> </phone:PanoramaItem> </phone:Panorama> |
QrCodeCreRea.xaml.cs -Kod-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
private void btnQrCodeCreate_Click(object sender, RoutedEventArgs e) { IBarcodeWriter writer = new BarcodeWriter { Format = BarcodeFormat.QR_CODE, Options = new ZXing.Common.EncodingOptions { Height = 300, Width = 300 }, Renderer = new ZXing.Rendering.WriteableBitmapRenderer() { Foreground = Colors.Black } }; var result = writer.Write(txtHesapNo.Text); var wb = result as WriteableBitmap; pctQRCreate.Source = wb; } |
1 2 3 4 5 6 7 8 9 |
private void btnQrCodeRead_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/QrCodeRead.xaml”, UriKind.Relative)); } private void btnQrCodeReadAlter_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/QrCodeReadAlternate.xaml”, UriKind.Relative)); } |
Bu kısımda qr code okutmak için hazırladığımız ilk kısım yer alıyor. Eklenecek kütüphaneler şöyle :
1 2 3 |
using System.Windows; using Microsoft.Phone.Controls; using ZXing.Mobile; |
QrCodeRead.xaml -Tasarım-
Tasarım kısmında herhangi bir kod yazmamıza gerek yok.
QrCodeRead.xaml.cs -Kod-
1 2 3 4 5 |
public QrCodeCreate() { InitializeComponent(); this.Loaded += QrCodeCreate_Loaded; } |
1 2 3 4 5 6 7 |
private async void QrCodeCreate_Loaded(object sender, RoutedEventArgs e) { MobileBarcodeScanner scan = new MobileBarcodeScanner(this.Dispatcher); scan.UseCustomOverlay = false; var result = await scan.Scan(); ResultScan(result); } |
1 2 3 4 5 6 7 8 9 |
private void ResultScan(ZXing.Result result) { string mesaj = string.Empty; mesaj = result.Text; this.Dispatcher.InvokeAsync(() => { MessageBox.Show(mesaj); }); } |
Uygulama bu şekilde arkadaşlar. Eğer sizde benim gibi emülatör kullanacaksanız, qrcode okutma kısmının emülatörde hata vermemesi için şu adımları takip edebilirsiniz.
1 |
Solution Explorer -> Properties -> WMApplManifest.xml -> Capabilities |
Adımlarını izledikten sonra ID_CAP_ISV_CAMERA yazısının yanında bulunan check alınanı işaretleyin. Emülatör üzerinde her ne kadar kamera açılmıyor olmasa da uygulamanın o kısmının çalıştığının garantisini verebilirim.
QrCode okutma işlemini load olurken değilde buton altında yapmak isterseniz şöyle bir kodda yazabilirsiniz. Eklenecek kütüphaneler şöyle:
1 2 3 |
using System.Windows; using Microsoft.Phone.Controls; using ZXing.Mobile; |
QrCodeReadAlternate.xaml -Tasarım-
1 |
<Button Content=“Para Gönder” Name=“QrCodeOku” HorizontalAlignment=“Center” VerticalAlignment=“Center” Click=“QrCodeOku_Click”/> |
QrCodeReadAlternate.xaml.cs -Kod-
1 2 3 4 5 6 7 8 9 10 |
private async void QrCodeOku_Click(object sender, RoutedEventArgs e) { MobileBarcodeScanner scan = new MobileBarcodeScanner(this.Dispatcher); var result = await scan.Scan(); if (result != null) MessageBox.Show(“Taranılan Barkod: “ + result.Text); else MessageBox.Show(“Barkod taraması başarısız !”, “Hata !”, MessageBoxButton.OK); } |
Herkese iyi çalışmalar. Umarım faydalı olmuştur.
Projeyi indirmek için bağlantıya tıklayabilirsiniz.
Kaynak : http://ekremalpay.com/