2016-08-02 62 views
7

QR kodu oluşturmak için ZXing kullanıyorum. ,ZXing'de bitmap'in boyutu nasıl ayarlanır?

<StackLayout Padding="20,30,20,30"> 
    <Label Text="..." FontSize="Medium "/> 
    <Frame VerticalOptions="CenterAndExpand"> 
     <Image x:Name="qrImage" WidthRequest="300" /> 
    </Frame> 
    ... 
</StackLayout> 

sorundur:

public partial class QRPage : ContentPage 
{ 
    public QRPage() 
    { 
     InitializeComponent(); 


     var stream = DependencyService.Get<IBarcodeService>().ConvertImageStream("nika"); 
     qrImage.Source = ImageSource.FromStream(() => { return stream; }); 
     qrImage.HeightRequest = 200; 

    } 
} 

Ve diğer kısmı:

İşte
[assembly: Xamarin.Forms.Dependency(typeof(BarcodeService))] 
namespace MyApp.Droid 
{ 
    public class BarcodeService : IBarcodeService 
    { 
     public Stream ConvertImageStream(string text, int width = 500, int height = 500) 
     { 
      var barcodeWriter = new ZXing.Mobile.BarcodeWriter 
      { 
       Format = ZXing.BarcodeFormat.QR_CODE, 
       Options = new ZXing.Common.EncodingOptions 
       { 
        Width = width, 
        Height = height, 
        Margin = 2 
       } 
      }; 

      barcodeWriter.Renderer = new ZXing.Mobile.BitmapRenderer(); 
      var bitmap = barcodeWriter.Write(text); 
      var stream = new MemoryStream(); 
      bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream); 
      stream.Position = 0; 
      return stream; 
     } 
    } 
} 

Ben kodu kullanıyorum xaml olan bu benim kod neye benzediği ConvertImageStream için yükseklik ve genişlik olarak ne olursa olsun sonuçta ortaya çıkan görüntü karesi değil, bunun yerine şu şekilde görünür:

enter image description here

Bunu kareye nasıl dönüştürebilirim? Şimdiden teşekkürler.

cevap

2

Kodunuz doğruysa ve görüntü doğru boyutta: boyutunu

var filePath = System.IO.Path.Combine(Environment.ExternalStorageDirectory.AbsolutePath, "qrcode.png"); 
using (var fileStream = new FileStream(filePath, FileMode.Create)) 
{ 
    bitmap.Compress(Bitmap.CompressFormat.Png, 100, fileStream); 
} 

Sonra çekerek ve kontrol:

$ adb pull /sdcard/qrcode.png 
[100%] /sdcard/qrcode.png 
$ identify qrcode.png 
qrcode.png PNG 500x500 500x500+0+0 8-bit sRGB 2.85KB 0.000u 0:00.000 

enter image description here

Ben kaydederek kontrol katına

My Page code:

var image = new Image(); 
var content = new ContentPage 
{ 
    BackgroundColor = Color.Red, 
    Title = "ZXingQRCode", 
    Content = new StackLayout 
    { 
     VerticalOptions = LayoutOptions.Center, 
     Children = { 
      new Label { 
       HorizontalTextAlignment = TextAlignment.Center, 
       Text = "StackOverflow", 
       FontSize = 40 
      }, 
      image 
     } 
    } 
}; 
MainPage = new NavigationPage(content); 
var stream = DependencyService.Get<IBarcodeService>().ConvertImageStream("https://StackOverflow.com"); 
image.Source = ImageSource.FromStream(() => { return stream; }); 
image.HeightRequest = 250; 

Güncelleme:

Size o görüntünün gösterildiğini, resim kendisi sonra geniştir görüyoruz Frame olduğunu. Frame

<StackLayout Padding="20,30,20,30"> 
    <Label Text="..." FontSize="Medium" /> 
    <Frame VerticalOptions="CenterAndExpand" BackgroundColor="Red"> 
     <Image x:Name="qrImage" WidthRequest="300" /> 
    </Frame> 
</StackLayout> 

enter image description here

+0

o benim app ne yayınlanmıştır benziyor neden herhangi bir öneri ve BackgroundColor değiştirme? – nicks

+1

@NikaGamkrelidze Sorunuzdaki bu sayfa için xaml (veya kodunuzu) gönderebilir ya da aynı sonucu kendim alıp alamayacağımı görmek için ilk önce cevabımdaki sayfa kodunu deneyebilirsiniz ... – SushiHangover

+0

lütfen XAML kodu için düzenlemeye bakın – nicks