2016-12-30 2 views
0


Я разрабатываю приложение Xamarin с проектом Native Shared.
Это мой Инверсия метод фильтра для растровых изображений
Unknwon Member Bitmap.SetPixel (x, y, color) в 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, при применении фильтра в растр, и я понятия не имею, как это исправить, вот это место, оно возникает:

Получаю, что это некоторая ошибка 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 в качестве неизменяемого Bitmap, этот метод не реализован – SushiHangover

Смежные вопросы