2016-08-02 3 views
7

मैं एक क्यूआर कोड उत्पन्न करने के लिए जेएक्सिंग का उपयोग कर रहा हूं।ZXing में बिटमैप का आकार कैसे सेट करें?

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


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

    } 
} 

और अन्य भाग:

[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; 
     } 
    } 
} 

यहाँ XAML जहाँ मैं कोड का उपयोग कर रहा है: यह मेरा कोड कैसा दिखता है

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

समस्या है, इससे कोई फर्क नहीं पड़ता कि मैं ConvertImageStream के लिए ऊंचाई और चौड़ाई के रूप में क्या सेट करता हूं, परिणामी छवि वर्ग नहीं है, बल्कि यह इस तरह दिखती है:

enter image description here

मैं इसे एक वर्ग में कैसे बदल सकता हूं? अग्रिम में धन्यवाद।

उत्तर

2

आपका कोड सही है और छवि को सही ढंग से आकार:

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); 
} 

और फिर यह खींच रहा है और इसका आकार की जाँच:

$ 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

मैं इसे बचत द्वारा जाँच की दोगुनी

मेरा पृष्ठ कोड:

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; 

अद्यतन:

यह 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

कारण है कि यह मैं क्या मेरे एप्लिकेशन में तैनात की तरह दिखता है पर किसी भी सुझाव के BackgroundColor बदलें? – nicks

+1

@NikaGamkrelidze क्या आप अपने प्रश्न में उस पृष्ठ के लिए अपना xaml (या कोड) पोस्ट कर सकते हैं, या यह देखने के लिए पहले मेरे पृष्ठ में पृष्ठ कोड आज़माएं कि आप खुद के समान परिणाम प्राप्त कर रहे हैं ... – SushiHangover

+0

कृपया XAML कोड के लिए संपादन देखें – nicks

संबंधित मुद्दे