Xamarin:如何在 SkiaSharp 位图的中心对齐徽标图像

Xamarin: How can I align a logo image in the center of a SkiaSharp Bitmap

我正在尝试将徽标对齐 SKBitmap

这是我的代码:

SKBitmap bmpResult = SKBitmap.Decode(imgByteArray);
bitmap.DrawBitmap(bmpResult, 0, 20);

我已经尝试过不同的图像,但结果是一样的。

我知道 SkiaSharp 有 MeasureText,但是,正如它所说,用于文本,而不用于图像。

我试图用 DeviceDisplay.MainDisplayInfo.Width 得到我的设备宽度并除以 2,但没有结果。

注意,即使我得到一个精确的数字来划分(例如:bitmap.DrawBitmap(bmpResult, DeviceDisplay.MainDisplayInfo.Width / 2, 20);),当我有不同的屏幕密度时,最终结果也会不同,即与一个设备对齐,与其他人不对齐。

有人知道我该如何解决吗?

您可以创建两个位图(位图 1、位图 2)。先画bitmap1,再画bitmap2。我在中间做了两张位图供大家参考。

  public partial class Page8 : ContentPage
{      
    SKBitmap bitmap1 = new SKBitmap();
    SKBitmap bitmap2 = new SKBitmap();
    public Page8()
    {
        InitializeComponent();

        bitmap1 = LoadBitmapResource(typeof(Page8), "App3.image.jpeg");
        bitmap2 = LoadBitmapResource(typeof(Page8), "App3.durian_64.png");       

        // Create the SKCanvasView and set the PaintSurface handler
        SKCanvasView canvasView = new SKCanvasView();
        canvasView.PaintSurface += OnCanvasViewPaintSurface; ;
        Content = canvasView;
    }

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

        canvas.Clear();

        float x1 = (info.Width - bitmap1.Width) / 2;
        float y1 = (info.Height - bitmap1.Height) / 2;

        float x2 = (info.Width - bitmap2.Width) / 2;
        float y2 = (info.Height - bitmap2.Height) / 2;

        canvas.DrawBitmap(bitmap1, x1, y1);
        canvas.DrawBitmap(bitmap2, x2, y2);
    }
    public static SKBitmap LoadBitmapResource(Type type, string resourceID)
    {
        Assembly assembly = type.GetTypeInfo().Assembly;

        using (Stream stream = assembly.GetManifestResourceStream(resourceID))
        {
            return SKBitmap.Decode(stream);
        }
    }

}

在屏幕截图中,您会在位图 1 的中心看到位图 2(绿色榴莲)。