2011-01-25 3 views
0

У меня возникли проблемы с перемещением окна с переменным размером над 2D-массивом в vb.net. моя проблема заключается в том, что когда я беру первый элемент массива на 0,0, то размер окна должен быть меньше, потому что этот элемент должен быть центром скользящего окна. ex: размер аранжировки (40,43) размер окна 5x5 (размер окна равен NxN N = 3 размера побед 3x3), поэтому массив (0,0) с размером выигрыша 5, так что 2 col и 2 строки должны быть отключены, а новый размер окна 3x3. любая помощь будет great.`скользящее окно над 2d массивом в vb.net

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 

УАК пикселей является 2d массив

ответ

0

Что-то вроде этого?

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

им не уверен, что я читал это право, но что, если im на 20,10 в массиве данных, это даст мне полное окно из 25 значений? – bob

+0

Да, будет. Вы можете создать проект консоли, вставить этот класс и запустить его как основной класс. Таким образом, вы можете играть с разными значениями, чтобы убедиться, что он работает по назначению. Кроме того, я могу добавить версию с большим количеством комментариев к коду, если хотите. – ManiSto

Смежные вопросы