Xamarin使用Skia图形库形成(android项目)错误渲染图像

时间:2017-03-08 02:20:42

标签: xamarin xamarin.android xamarin.forms skia skiasharp

我正在尝试使用我的xamarin表单解决方案中的skia图形库加载和渲染图像。当我尝试渲染图像(运行android项目)时,我收到以下错误:

Value cannot be null. Parameter name: codec

这是代码:

void OnPainting(object sender, SKPaintSurfaceEventArgs e)
{

    var surface = e.Surface;
    var canvas = surface.Canvas;

    canvas.Clear(SKColors.White);

    var filename = "test.jpg";

    using (var stream = new SKFileStream(filename))
    using (var bitmap = SKBitmap.Decode(stream)) // the error occurs on this line
    using (var paint = new SKPaint())  
    {
      canvas.DrawBitmap(bitmap, SKRect.Create(200, 200), paint);
    }
}

我在网上找不到任何xamarin的示例代码。任何示例代码或链接都将非常感激。

提前致谢

1 个答案:

答案 0 :(得分:3)

  

值不能为空。参数名称:codec

我认为你可以在这里得到一个空对象:using (var stream = new SKFileStream(filename))。我试图创建一个演示,它工作正常。

XAML:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:skiaviews="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"
             x:Class="FormsIssue6.Page1">
    <Grid>
        <skiaviews:SKCanvasView x:Name="mycanvas" PaintSurface="OnPainting" />
    </Grid>
</ContentPage>

代码背后:

private void OnPainting(object sender, SkiaSharp.Views.Forms.SKPaintSurfaceEventArgs e)
{
    var surface = e.Surface;
    var canvas = surface.Canvas;

    var assembly = typeof(Page1).GetTypeInfo().Assembly;
    var fileStream = assembly.GetManifestResourceStream("YOUR-FILE-FULL-NAME");
    // clear the canvas / fill with white
    canvas.DrawColor(SKColors.White);

    // decode the bitmap from the stream
    using (var stream = new SKManagedStream(fileStream))
    using (var bitmap = SKBitmap.Decode(stream))
    using (var paint = new SKPaint())
    {
        // create the image filter
        using (var filter = SKImageFilter.CreateBlur(5, 5))
        {
            paint.ImageFilter = filter;

            // draw the bitmap through the filter
            canvas.DrawBitmap(bitmap, SKRect.Create(640, 480), paint);
        }
    }
}

上面代码中的文件名应该类似于“您的项目名称”。“文件名”,此文件放在PCL中,此文件的构建操作必须是“嵌入式资源”。有关使用文件的更多信息,请参阅Files

  

我在网上找不到任何xamarin的示例代码。任何示例代码或链接都将非常感激。

Github上的包本身有一个Xamarin.Forms的代码示例,你可以参考FormsSample