Używam ZXing do generowania kodu QR. To właśnie mój kod wygląda następująco:Jak ustawić rozmiar bitmapy w 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;
}
}
az drugiej strony:
[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;
}
}
}
Oto XAML gdzie używam kod:
<StackLayout Padding="20,30,20,30">
<Label Text="..." FontSize="Medium "/>
<Frame VerticalOptions="CenterAndExpand">
<Image x:Name="qrImage" WidthRequest="300" />
</Frame>
...
</StackLayout>
Problem polega na tym, Bez względu na to, co ustawię jako wysokość i szerokość dla ConvertImageStream
, wynikowy obraz nie jest kwadratowy, ale raczej wygląda tak:
Jak mogę zmienić go w kwadrat? Z góry dziękuję.
wszelkie sugestie na temat, dlaczego to wygląda, co napisałem w mojej aplikacji? – nicks
@NikaGamkrelidze Czy umieścisz swój xaml (lub kod) dla tej strony w pytaniu, lub spróbujesz najpierw użyć kodu strony w mojej odpowiedzi, aby zobaczyć, czy uzyskasz taki sam wynik jak ja ... – SushiHangover
zobacz edycję kodu XAML – nicks