Ciao, non mi intendo molto dell'argomento, ma da quanto scritto nella documentazione, il metodo createImage(new MemoryImageSource(imgCols,imgRows,pixels,0,imgCols )); dovrebbe fare esattamente quello che serve a te.
Magari c'e' perdita di informazioni perche' passi da un formato ad un altro (da jpg a png).
Prova a salvare come jpg.