Лично я бы пошел с простым подходом «продолжайте выборку, пока не получите действительное значение», если только у вас не будет шанса, что у вас будет очень большой белый прямоугольник против серого, который не намного больше.Для меня проще - почти всегда лучше.
Альтернативой было бы определить, сколько будет возможных пикселей, и сгенерировать случайное число в этом диапазоне.Затем эффективно пронумеруйте пиксели сверху вниз слева направо.Определите, находится ли данный случайный образец в верхней части, нижней части или в середине (что можно сделать, просто посмотрев, меньше ли он первого пикселя в верхней строке белого прямоугольника или меньше первого пикселя налиния под белым прямоугольником).Как только вы это выясните, нужно просто проработать строку, а затем пиксель в строке.Это не очень сложно, но - это довольно сложно и легко ошибиться.Обратите внимание, что это определяет один случайный пиксель: поскольку вы генерируете большие квадраты, вы должны рассмотреть диапазон допустимых пикселей для верхнего левого угла квадрата и найти образец в этом диапазоне.