2017-03-08 2 views
1

Ich versuche zu laden und ein Bild mit der Skia-Grafik-Bibliothek in meinem Xamarin Formen Lösung. Wenn ich versuche, das Bild zu machen (das Android-Projekt ausgeführt wird) ich die folgende Fehlermeldung erhalten:Xamarin Formen (Android-Projekt) Fehler Rendering Bild mit Skia Grafikbibliothek

Value cannot be null. Parameter name: codec 

hier ist der Code:

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); 
    } 
} 

Ich kann keinen Beispielcode online Xamarin finden. Jeder Beispielcode oder Links würden sehr geschätzt werden.

Dank im Voraus

Antwort

3

Value cannot be null. Parameter name: codec

Ich denke, es möglich ist, Sie hier ein Null-Objekt erhalten: using (var stream = new SKFileStream(filename)). Ich habe versucht, ein Demo zu erstellen, und es funktioniert gut.

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> 

-Code hinter:

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); 
     } 
    } 
} 

Der Dateiname in dem obigen Code sollte wie "IHR PROJEKT Namensraum" seine "Dateiname", und diese Datei platziert in. PCL und Build-Aktion dieser Datei muss "Embedded Resource" sein. Weitere Informationen zum Arbeiten mit einer Datei finden Sie unter Files.

I cannot find any sample code online for xamarin. Any sample code or links would be much appreciated.

Das Paket selbst auf Github ein Codebeispiel für Xamarin.Forms hat, können Sie auf FormsSample beziehen.

+0

Es funktioniert jetzt, danke! – noobie