The only way I've found to do what you're wanting to do is by using DrawRect() to draw 1x1 rectangles for each pixel, or by creating 1x1 roRegions and using Clear(), neither of which is efficient nor fast. You could potentially come up with some algorithm that calculates different size rects for larger color swatches, which could improve the speed, but the extra processing to calculate those would probably end up in a wash.
I think being able to call SetByteArray would be the best and most efficient way to implement the functionality, which has been discussed in the past, but nothing ever came of it. I've also tried implementing an uncompressed PNG routine that would convert a byte array into a PNG, but couldn't quite figure out the headers to pull it off without doing some amount of processing of the byte array, which ended up being just as inefficient.