如何在SkiaSharp中将字节数组转换为SKBitmap?

时间:2017-12-29 04:13:40

标签: .net-core asp.net-core-mvc 2d .net-standard skiasharp

KBitmap.Bytes是只读的,有关Marshal的任何建议。将字节数组复制到SKBitmap?我正在使用下面的代码片段,但它不起作用。

代码段:

    SKBitmap bitmap = new SKBitmap((int)Width, (int)Height);
    bitmap.LockPixels();
    byte[] array = new byte[bitmap.RowBytes * bitmap.Height];
    for (int i = 0; i < pixelArray.Length; i++)
    {
        SKColor color = new SKColor((uint)pixelArray[i]);
        int num = i % (int)Width;
        int num2 = i / (int)Width;
        array[bitmap.RowBytes * num2 + 4 * num] = color.Blue;
        array[bitmap.RowBytes * num2 + 4 * num + 1] = color.Green;
        array[bitmap.RowBytes * num2 + 4 * num + 2] = color.Red;
        array[bitmap.RowBytes * num2 + 4 * num + 3] = color.Alpha;
    }
    Marshal.Copy(array, 0, bitmap.Handle, array.Length);
    bitmap.UnlockPixels();

1 个答案:

答案 0 :(得分:0)

由于位图位于非托管/本机内存中,并且字节数组位于托管代码中,因此您将始终必须执行一些编组操作。但是,你可能会做这样的事情:

{{1}}

这会固定托管内存并将指针传递给位图。这样,两者都访问相同的内存数据,并且不需要实际进行任何转换(或复制)。 (必须在使用后取消固定固定内存,以便GC可以释放内存。)

此处:https://github.com/mono/SkiaSharp/issues/416