Вы не сможете сделать это, используя встроенные классы, как вы используете, так как они предназначены для оптовой продажи растровых изображений. Возможно, вам лучше запустить их из Java с помощью чего-то вроде Image Magick (или как там в наши дни).
Вам нужно сделать это один раз?
Возможно, вы застряли при необходимости написать все это самостоятельно, загрузив файл, обработав «пиксели» и записав его. Это был бы ЛУЧШИЙ способ сделать это, вместо того, чтобы загружать всю вещь, конвертировать (т.е. копировать) ее и записывать. Я не знаю, работают ли такие вещи, как Image Magick, на потоках или изображениях памяти.
Дополнения для AlexR:
Чтобы сделать это ПРАВИЛЬНО, ему нужно декодировать файл в какой-то формат, который можно преобразовать. Например, JPEG делит изображения на 8x8 блоков, сжимает их по отдельности, а затем выводит эти блоки. Во время потоковой передачи сами блоки сжимаются (поэтому, если у вас было 10 черных блоков, вы получаете 1 черный блок со счетом 10).
Необработанная битовая карта немного больше, чем блоки байтов, для больших цветовых пространств с альфа-каналом это 4 байта (по одному для красного, зеленого, синего и альфа-канала). Большинство преобразований цветового пространства происходит на уровне пикселей. Другие более сложные фильтры работают с пикселем и окружающими пикселями (простой пример - размытие по Гауссу).
Для простоты, особенно с множеством различных форматов, проще "загрузить все изображение" в память, поработать над его необработанной битовой картой, скопировать эту битовую карту при преобразовании, а затем записать необработанное изображение обратно во что угодно формат (скажем, преобразование цветного JPEG в PNG с серой шкалой).
Для больших изображений, с которыми имеет дело этот человек, это оказывается ОЧЕНЬ дорого с памятью.
Итак, ОПТИМАЛЬНО, он писал бы определенный код для чтения файла по частям, то есть передавал его по потоку, конвертировал каждый маленький бит и возвращал его обратно. Это заняло бы совсем немного памяти, но ему, вероятно, пришлось бы выполнять большую часть работы сам.
Так что, да, он может "просто читать изображение побайтно", но обработка и алгоритмы, скорее всего, будут довольно сложными.