2017-11-22 18 views
0

私はMATLABから.netアセンブリファイルを作成し、それをc#windowsとc#webアプリケーションで使用しました。今私はxamarinでこのアセンブリファイルを使用したいが、私はエラーを取得しています。 C#コードもxamarinで動作するはずです。ではない??xamarinで.netライブラリを呼び出す

Windowsでは、イメージのr、g、bチャネルをフェッチしようとしましたが、xamarinで同じことをしようとするとエラーが発生します。 ウィンドウコードが通りである:

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コードがある:私はR、G及びBチャネルをフェッチのエラーを取得してい

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); 

「int型」「R」の定義が含まれていないと何の拡張メソッド「R」タイプの最初の引数を受け入れる「INT」は見つかりませんでした(あなたがusingディレクティブまたはアセンブリ参照が不足している?)

このエラーを解決するのを手伝ってください。本当にいっぱいになるでしょう。おかげさまで

+0

、あなたは 'GetPixel'は' int'なく 'Color'を返すことを見てきたと思います。返されたintを使って 'Color'インスタンスを作成する必要があります。 –

+0

@CamiloTerevintoまあ、正直言って、私もこれを言うつもりでしたが、実際には 'Color'を返すことになっていました:https://developer.xamarin.com/api/member/System.Drawing.Bitmap.GetPixel /p/System.Int32/System.Int32/ –

+0

@SoroushFalahati OPが 'System.Drawing.Bitmap'を使用した場合、エラーメッセージ(" int does not ... ")によると、彼は。 –

答えて

1

Android.Graphics.Bitmapを使用しているようです。このオブジェクトのGetPixelメソッドは、Android.Graphics.Colorに変換する必要があるintを返します。これにあなたのコードを変更します。

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が非常に遅い、遅いです。私はAndroid.Graphics.Bitmap.CopyPixelsToBuffer()メソッドを使って生のバイナリデータを扱うことをお勧めします。ここで続きを読む:あなたはXamarinのドキュメントを見て時間を取っていた場合

https://developer.xamarin.com/api/member/Android.Graphics.Bitmap.CopyPixelsToBuffer/p/Java.Nio.Buffer/

+0

よろしくお願いします。私はこれを試してみましょうと私はuに戻るでしょう。 – Andrew

+0

それは何のエラーも与えないが、問題を解決しなかった。今私はxamarinでdllファイルを読み込むことができません:(助けてくれてありがとう。 – Andrew

関連する問題