Saya sedang mengembangkan aplikasi iOS Xamarin Forms. Di file xaml, ada kotak.

<Grid x:Name="QrCodeSite" HeightRequest="300" Margin="37, 37, 37, 0">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
</Grid>

Dalam file .cs terkait, saya menggunakan ZXing.Net.Mobile.Forms untuk menghasilkan kode QR dan menempatkannya di grid. Dan saya meletakkan logo saya di kotak yang sama, yang akhirnya akan muncul di tengah kode QR.

var barcode = new ZXingBarcodeImageView
{
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand
};
barcode.BarcodeFormat = ZXing.BarcodeFormat.QR_CODE;
barcode.BarcodeOptions.Width = 650;
barcode.BarcodeOptions.Height = 650;
barcode.BarcodeOptions.Margin = 1;
barcode.BarcodeValue = value;


var img = new Image
{
Source = "logo.png",
WidthRequest = 70,
HeightRequest = 70,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
};

QrCodeSite.Children.Clear();

QrCodeSite.Children.Add(barcode);
QrCodeSite.Children.Add(img);

Masalahnya, mungkin ponsel saya (iPhone 6s plus) terlalu lambat, terkadang logo muncul terlebih dahulu dan setelah lag (sekitar 1 detik) kode QR ditampilkan. Bagaimana saya bisa menggabungkan kode QR dan logo menjadi satu gambar dan kemudian menambahkannya ke kisi?

0
Ivor Horton 10 Maret 2020, 18:21

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan SkiaSharp untuk menampilkan Gambar atau menggabungkan gambar . Lihat cara Tampilkan bitmap SkiaSharp untuk mengunduh contoh proyek untuk diteliti.

Berdasarkan Menggambar pada referensi bitmap yang ada, Anda dapat memodifikasinya sebagai berikut:

public partial class MonkeyMoustachePage : ContentPage
{
    SKBitmap monkeyBitmap;

    public MonkeyMoustachePage()
    {
        Title = "Monkey Moustache";

        monkeyBitmap = BitmapExtensions.LoadBitmapResource(GetType(),
            "SkiaSharpFormsDemos.Media.MonkeyFace.png");

        SKBitmap iconImage = BitmapExtensions.LoadBitmapResource(GetType(),
            "SkiaSharpFormsDemos.Media.GooglePlaylogo.png");

        int offset = monkeyBitmap.Width / 2 - iconImage.Width / 2;
        int offsetTop = monkeyBitmap.Height / 2 - iconImage.Height / 2;
        // Create canvas based on bitmap
        using (SKCanvas canvas = new SKCanvas(monkeyBitmap))
        {
            canvas.DrawBitmap(iconImage, SKRect.Create(offset, offsetTop, iconImage.Width, iconImage.Height));
        }

        // Create SKCanvasView to view result
        SKCanvasView canvasView = new SKCanvasView();
        canvasView.PaintSurface += OnCanvasViewPaintSurface;
        Content = canvasView;

        //save the new image
        using (MemoryStream memStream = new MemoryStream())
        using (SKManagedWStream wstream = new SKManagedWStream(memStream))
        {
            monkeyBitmap.Encode(wstream, imageFormat, quality);
            byte[] data = memStream.ToArray();

            // Check the data array for content!

            bool success = await DependencyService.Get<IPhotoLibrary>().SavePhotoAsync(data, folder, filename);

            // Check return value for success!
         }
    }

    void OnCanvasViewPaintSurface(object sender, SKPaintSurfaceEventArgs args)
    {
        SKImageInfo info = args.Info;
        SKSurface surface = args.Surface;
        SKCanvas canvas = surface.Canvas;

        canvas.Clear();
        canvas.DrawBitmap(monkeyBitmap, info.Rect, BitmapStretch.Uniform);
    }
}

Kemudian Anda akan melihat ikon logo akan ditampilkan dalam gambar asli:

enter image description here

Jika Anda ingin menyimpan bitmap SkiaSharp ke file, lihat ini:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/bitmaps/saving# menjelajahi-format-gambar

Catatan: File BitmapExtensions.cs berasal dari proyek sampel. Omong-omong, saat menambahkan gambar ke proyek, Anda perlu mengatur Build ACtion gambar menjadi Sumber daya yang disematkan .Sebagai mengikuti :

enter image description here

1
Junior Jiang 12 Maret 2020, 02:42