2011-01-25 15 views
0

vb.netの2D配列に対して可変サイズのウィンドウをスライドさせることに問題があります。私の悩みは、配列の最初の要素を0,0にするときです。問題の要素がスライディングウィンドウの中心でなければならないので、ウィンドウのサイズはこれまでより小さくする必要があります。例:arrarサイズ(40,43)ウィンドウサイズ5x5(ウィンドウサイズはNxN N = 3のウィンサイズは3x3です)したがって、サイズがwin 5の配列(0,0)なので、2 colと2 rowsを取り出す必要があり、ウィンドウサイズは3x3です。任意のヘルプは、VaRのピクセルvb.netの2次元配列上のスライディングウィンドウ

Public Function getPIXELSinWINDOW(ByVal Wsize As Integer, ByVal x As Integer, ByVal y As Integer) 

     Dim tempARRAY As New ArrayList() 
     Dim Xwidth As Integer = Wsize 
     Dim Yheight As Integer = Wsize 
     Dim Xvalue As Integer = x - Wsize/2 
     Dim Yvalue As Integer = y - Wsize/2 
     Dim imgHEIGHT As Integer = Me.mysize.Height 
     Dim imgWIDTH As Integer = Me.mysize.Width 
     Dim i, j As Integer 


     While Xvalue < 0 
      Xvalue += 1 
      Xwidth -= 1 
     End While 
     While Xvalue > imgWIDTH 
      Xvalue -= 1 
      Xwidth -= 1 
     End While 
     While Xwidth >= imgWIDTH 
      Xwidth -= 1 
     End While 
     While Xvalue + Xwidth > imgWIDTH 
      Xwidth -= 1 
     End While 

     While Yvalue < 0 
      Yvalue += 1 
      Yheight -= 1 
     End While 
     While Yvalue > imgHEIGHT 
      Yvalue -= 1 
      Yheight -= 1 
     End While 
     While Yheight >= imgHEIGHT 
      Yheight -= 1 
     End While 
     While Yvalue + Yheight > imgHEIGHT 
      Yheight -= 1 
     End While 

     For i = Xvalue To Xvalue + Xwidth 
      For j = Yvalue To Yvalue + Yheight 
       tempARRAY.Add(pixels(j, i)) 
      Next 
     Next 

     Return tempARRAY 
    End Function 

great.`だろう。このような

答えて

0

何か2D配列ですか?

public class MainClass 
{ 
    public static void Main (string[] args) 
    { 
     MainClass mc = new MainClass(); 
     List<int> pix = mc.GetPixelsInWindow(5, 40, 43);    
    } 

    private int[,] data = new int[40, 43]; 

    public List<int> GetPixelsInWindow(int windowSize, int xPoint, int yPoint) 
    { 
     // As we are dealing with integers, this will result in a truncated value, 
     // so a windowSize of 5 will yield a windowDelta of 2. 
     int windowDelta = windowSize/2; 
     List<int> pixels = new List<int>(); 

     int xMin = Math.Max(0, xPoint - windowDelta); 
     int xMax = Math.Min(data.GetLength(0) - 1, xPoint + windowDelta); 

     int yMin = Math.Max(0, yPoint - windowDelta); 
     int yMax = Math.Min(data.GetLength(1) - 1, yPoint + windowDelta); 

     for (int x = xMin; x <= xMax; x++) 
     { 
      for (int y = yMin; y <= yMax; y++) 
      { 
       Console.WriteLine("Getting pixel (" + x.ToString() + ", " + y.ToString() + ")..."); 
       pixels.Add(data[x, y]); 
      } 
     } 

     return pixels; 
    } 
} 
+0

ありがとうございました。申し訳ありませんがC#で使用していますが、とにかく理解できることを願っています。 :) – ManiSto

+0

私はこの権利を読んでいる私は確信していないが、私は20,10でデータ配列でこれは私に25値の完全なウィンドウを与えるのだろうか? – bob

+0

はい、そうです。コンソールプロジェクトを作成し、このクラスを貼り付けてメインクラスとして実行できます。この方法で、異なる値で再生して意図したとおりに動作することを確認できます。また、好きな場合は、コードコメントが多いバージョンを追加することもできます。 – ManiSto