2016-12-30 51 views
0


ネイティブ共有プロジェクトでXamarinアプリケーションを開発しています。
これは
UnknwonメンバBitmap.SetPixel(x、y、color)in 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; 
    } 

ビットマップにフィルタを適用するとき、私は、Java.Lang.IllegalStateExceptionエラーを取得していると私はそれを修正する方法が分からない、ここに入れてあるビットマップの私の反転フィルタ方式であります enter image description here

これは、なぜこれが発生しているのか分かりませんが、これはXamarinのエラーが.SetPixel()メソッドを認識しないということになります。ここで

ピクセル変数の内容です: enter image description here

+0

ポストテキスト内の実際のコード、キャップを選別ない – SushiHangover

+0

申し訳ありませんが、私はそれを追加することを忘れてしまいました。私の質問を更新しました –

+0

.SetPixels()はどちらも動作しません –

答えて

1

あなたBitmapは不変であり、したがって、あなたがIllegalStateExceptionを得ている、あなたはそれのコピーを作成し、そのコピーにSetPixelを使用することができます助けてください。

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

ありがとう!私は不変性について知らなかった。 –

+0

@AleksanderLipka * IllegalStateException *スタックトレース内では、バーチャル(または抽象)メソッドであるため実際には誤解を招くエラーであるが、不変/可変ビットマップが存在するため、 'SetPixel'が失敗していることがわかりますあなたが不変のビットマップとしてそのメソッドが実装されていないとしてASOPのJavaソースを見れば**意味がある** – SushiHangover