2016-08-02 4 views
7

QR 코드를 생성하기 위해 ZXing을 사용하고 있습니다. ,ZXing에서 비트 맵의 ​​크기를 설정하는 방법은 무엇입니까?

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

이 문제는 다음과 같습니다

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입니다 이건 내 코드는 모습입니다 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

@ NiikaGamkrelidze 질문에 해당 페이지에 대한 xaml (또는 코드)을 게시하거나 내 대답과 동일한 결과를 얻는 지 확인하려면 먼저 내 응답에서 페이지 코드를 사용해보십시오 ... – SushiHangover

+0

XAML 코드 편집을 참조하십시오. – nicks

관련 문제