скользящее окно над 2d массивом в vb.net - PullRequest
0 голосов
/ 25 января 2011

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

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 массив

1 Ответ

0 голосов
/ 25 января 2011

Как то так?

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;
    }
}
...