我正在使用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错误,当将过滤器应用于位图并且我不知道如何修复它时,这里就是它出现的地方:
我知道这是一些Xamarin错误无法识别.SetPixel()方法,我不知道为什么会发生这种情况。
这是像素变量的内容:
请帮忙
答案 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;
}