Это все можно оптимизировать, все время вписывая прямоугольники с недостающими данными, но мне кажется в твоем кейсе c инверсией, тебе проще вырезать часть картинки, которую нужно инверсировать, нарисовать её на канвасе, инвертировать весь канвас , нарисовать оставшуюся часть картинки
пример с инверсией я так просто привел, по сути мне нужно с окружности брать пиксели вернее их данные о цвете, и складывать в массив