Xamarin中的Unknwon成员Bitmap.SetPixel(x,y,color)

时间:2016-12-30 14:46:28

标签: xamarin xamarin.android android-bitmap


我正在使用Native Shared项目开发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

请帮忙

1 个答案:

答案 0 :(得分: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;
}