2017-03-08 9 views
1

J'essaye de charger et de rendre une image en utilisant la bibliothèque graphique skia dans ma solution de formulaires xamarin. Lorsque je tente de rendre l'image (en cours d'exécution du projet Android) Je reçois l'erreur suivante:Xamarin forms (projet android) erreur de rendu d'image à l'aide de la bibliothèque graphique Skia

Value cannot be null. Parameter name: codec 

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

Je ne peux pas trouver un exemple de code en ligne pour Xamarin. Tout exemple de code ou de liens serait très apprécié.

merci à l'avance

Répondre

3

Value cannot be null. Parameter name: codec

je pense qu'il est possible que vous obtenez un objet nul ici: using (var stream = new SKFileStream(filename)). J'ai essayé de créer une démo, et ça marche bien.

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

derrière:

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

Le nom du fichier dans le code ci-dessus devrait être comme "VOTRE PROJET namespace" "Nom du fichier", et ce fichier est placé. PCL et l'action de construction de ce fichier doit être "Embedded Resource". Pour plus d'informations sur l'utilisation du fichier, vous pouvez vous reporter à Files.

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

Le paquet lui-même sur Github a un exemple de code pour Xamarin.Forms, vous pouvez vous référer à FormsSample.

+0

Cela fonctionne maintenant, merci! – noobie