我已经从MATLAB创建了一个.net程序集文件,并在c#windows和c#web应用程序中使用它并且工作正常。现在我想在xamarin中使用这个汇编文件,但是我收到了错误。 C#代码也应该在xamarin中工作。不是吗?
在Windows中,当我试图获取图像的r,g和b通道时,它的工作正常,但是当我试图在xamarin中做同样的事情时,它给出了一个错误。 Windows代码如下:
int i, j;
Bitmap image = (Bitmap)pictureBox1.Image;
int width = image.Width;
int height = image.Height;
Bitmap processed_image = new Bitmap(width, height);
try
{
byte[,,] rgb = new byte[3, height, width];
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
rgb[0, i, j] = image.GetPixel(j, i).R;
rgb[1, i, j] = image.GetPixel(j, i).G;
rgb[2, i, j] = image.GetPixel(j, i).B;
}
}
MWNumericArray narr = new MWNumericArray();
narr = rgb;
Salt obj = new Salt();
MWArray u = obj.classification(narr);
label1.Text = u.ToString();
// MessageBox.Show(u.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
和xamarin代码如下:
int i, j;
Bitmap image = bitmapimage;// bitmapimage the image (either taken from gallery or captured using camera)
int width = image.Width;
int height = image.Height;
byte[,,] rgb = new byte[3, height, width];
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
{
rgb[0, i, j] = image.GetPixel(j, i).R;
rgb[1, i, j] = image.GetPixel(j, i).G;
rgb[2, i, j] = image.GetPixel(j, i).B;
}
}
MWNumericArray narr = new MWNumericArray();
narr = rgb;
Salt obj = new Salt();
MWArray u = obj.classification(narr);
textview.SetText(u);
我在获取R,G和B频道时遇到错误。
&#39; INT&#39;不包含&#39; R&#39;的定义没有推广方法&#39; R&#39;接受类型&#39; int&#39;的第一个参数可以找到(你错过了使用指令或程序集引用吗?)
请帮我解决这个错误。真的很棒。 感谢。
答案 0 :(得分:1)
在我看来,您正在使用Android.Graphics.Bitmap
。此对象的GetPixel
方法返回应转换为int
的{{1}}。将您的代码更改为:
Android.Graphics.Color
另外,作为附注, var color = new Android.Graphics.Color(image.GetPixel(j, i));
rgb[0, i, j] = color.R;
rgb[1, i, j] = color.G;
rgb[2, i, j] = color.B;
很慢,很慢。我建议使用GetPixel
方法处理原始二进制数据。在这里阅读更多内容: