Вы только что столкнулись с проблемой пространства и времени здесь.Я бы выбрал первую стратегию создания очень большого изображения 10000x10000, простая причина которого заключается во втором подходе, который, как вы говорите, включает в себя горы матричных копий, которых вы бы хотели избежать любой ценой.
Более того, сХорошее знание размера изображения позволяет в дальнейшем оптимизировать это значение от 10000 x 10000 до чего-то вроде 1000x1000.Если кажется, что изображение превышает это, удвойте его, как 2000 x 2000, и скопируйте старый на новый и продолжайте делать это по мере расширения вашего изображения. Это более проверенная стратегия, которая используется в знаменитой java.util.ArrayList
Таким образом, вы косвенно связываете компромисс между временем и пространством.И да, вам придется вычислять границы каждый раз, но это не выглядит для меня большой задачей, это можно сделать за O (1) раз.