Для начала избавься от использования bmp.GetPixel в каждом кадре.
Вот эту часть нужно вынести перед циклом отрисовки:
//
int[,] texture = new int[(Data[n, 2] - Data[n, 0] + 1) * (Data[n, 3] - Data[n, 1] + 1), 6];
int u = 0;
for (int j = Data[n, 4]; j < Data[n, 6]; j++)
{
for (int i = Data[n, 5]; i < Data[n, 7]; i++)
{
Color s1 = bmp.GetPixel(j, i);
texture[u, 3] = s1.R;
texture[u, 4] = s1.G;
texture[u, 5] = s1.B;
u++;
}
}
Без тестирования сложно сказать, но скорее всего это самый медленный участок твоего кода.
Хотя последний цикл с выводом на экран, тоже достаточно медленный, но его просто так не ускорить в шарпе.