2016-12-30 3 views
0


Je développe une application Xamarin avec le projet Native Shared.
Ceci est ma méthode de filtre d'inversion pour les bitmaps
Unknwon Membre Bitmap.SetPixel (x, y, couleur) dans Xamarin

using System; 
using Android.Graphics; 

public static Bitmap Inversion (Bitmap bmp) { 

     for (int x = 0; x < bmp.Width; x++) 
     { 
      for (int y = 0; y < bmp.Height; y++) 
      { 
       var pixel = new Color(bmp.GetPixel(x, y)); 
       bmp.SetPixel(x, y, Color.Rgb(255 - pixel.R, 255 - pixel.G, 255 - pixel.B)); 
      } 
     } 
     return bmp; 
    } 

Je reçois une erreur de java.lang.IllegalStateException, lors de l'application d'un filtre à bitmap et je ne sais pas comment y remédier, voici l'endroit où il Je reçois que c'est une erreur Xamarin qui ne reconnaît pas la méthode .SetPixel(), je ne sais pas pourquoi cela se produit.

Voici le contenu de la variable de pixels: enter image description here

S'il vous plaît aider

+0

Afficher le code actuel dans le texte, pas les captures d'écran – SushiHangover

+0

Désolé, j'ai oublié de l'ajouter. J'ai mis à jour ma question –

+0

. SetPixels() ne fonctionne pas non plus –

Répondre

1

Votre Bitmap est immuable et donc vous obtenez le IllegalStateException, vous pouvez faire une copie de celui-ci et ensuite utiliser SetPixel sur la copie.

public static Bitmap Inversion(Bitmap bmp) 
{ 
    var mutableBitmap = Bitmap.CreateBitmap(bmp.Width, bmp.Height, bmp.GetConfig()); 
    for (int x = 0; x < bmp.Width; x++) 
    { 
     for (int y = 0; y < bmp.Height; y++) 
     { 
      var pixel = new Color(bmp.GetPixel(x, y)); 
      var color = Color.Rgb(255 - pixel.R, 255 - pixel.G, 255 - pixel.B); 
      mutableBitmap.SetPixel(x, y, color); 
     } 
    } 
    return mutableBitmap; 
} 
+0

Thanks man! Je ne connaissais pas l'immutabilité. –

+0

@AleksanderLipka Aucun problème, dans la trace de la pile * IllegalStateException * vous verrez que SetPixel échoue en raison du fait qu'il s'agit d'une méthode virtuelle (ou abstraite), personnellement une erreur trompeuse, mais il y a des bitmaps immuables/mutables et donc il est logique ** si ** vous regardez la source ASOP Java comme un bitmap immuable n'a pas cette méthode implémentée – SushiHangover