Maybe we can leverage the idea behind your gifs. Try the following experiments (deliberately designed for low performance so you can watch progress):
testImage = ConstantImage[GrayLevel[.5], {200, 200}];
Monitor[
For[col = 1, col <= 200, col++,
For[row = 1, row <= 200, row++,
testImage = ReplaceImageValue[testImage, {col, row} -> .8]]],
testImage] // AbsoluteTiming
====
testImage = ConstantImage[GrayLevel[.5], {200, 200}];
Monitor[
For[col = 1, col <= 100, col++,
For[row = 1, row <= 200, row++,
testImage = ReplaceImageValue[testImage, {col, row} -> .8];
testImage = ReplaceImageValue[testImage, {col + 100, row} -> .2]]],
testImage] // AbsoluteTiming
====
testImage = ConstantImage[GrayLevel[.5], {200, 200}];
Monitor[
For[col = 1, col <= 100, col++,
For[row = 1, row <= 100, row++,
testImage = ReplaceImageValue[testImage, {col, row} -> .9];
testImage = ReplaceImageValue[testImage, {col + 100, row + 100} -> .6]];
For[row = 1, row <= 100, row++,
testImage = ReplaceImageValue[testImage, {col, row + 100} -> .1];
testImage = ReplaceImageValue[testImage, {col + 100, row} -> .4]]],
testImage] // AbsoluteTiming