scanner code android xamarin bitmap xamarin.forms zxing

android - xamarin qr code scanner



Cómo establecer el tamaño del mapa de bits en ZXing? (1)

Su código es correcto y la imagen tiene el tamaño correcto:

Doblé comprobado guardándolo:

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

Y luego tirando de él y verificando su tamaño:

$ 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

Mi código de página:

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;

Actualizar:

Es el Frame que estás viendo que es más ancho que la imagen, no la imagen en sí misma. Cambiar el BackgroundColor del marco

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

Estoy usando ZXing para generar un código QR. Así es como se ve mi código:

public partial class QRPage : ContentPage { public QRPage() { InitializeComponent(); var stream = DependencyService.Get<IBarcodeService>().ConvertImageStream("nika"); qrImage.Source = ImageSource.FromStream(() => { return stream; }); qrImage.HeightRequest = 200; } }

Y la otra parte:

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

Aquí está el xaml donde estoy usando el código:

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

El problema es que, independientemente de lo que establezca como alto y ancho para ConvertImageStream , la imagen resultante no es cuadrada, sino que se ve así:

¿Cómo puedo convertirlo en un cuadrado? Gracias por adelantado.