Не так уж много вы можете сделать, не имея этого изображения в памяти и не создавая второй буфер для хранения измененной версии. Я считаю, что второй буфер может содержать меньше битов на цвет и даже пропустить альфа-значение. Если вы выберете 4 бита на цвет, вы сможете сэкономить 50% от оригинала, и это не включает экономию, если вы избавитесь от альфа.
Набор простых вызовов скажет вам, что представляет собой информация на картинке, например, биты на цвет и содержит ли она альфа:
CGImageAlphaInfo CGImageGetAlphaInfo (
CGImageRef image
);
Возвращаемое значение
Константа CGImageAlphaInfo, которая указывает (1), содержит ли растровое изображение альфа-канал, (2) где альфа-биты расположены в данных изображения и (3) предварительно умножено значение альфа. Возможные значения см. В разделе «Константы». Функция возвращает kCGImageAlphaNone, если параметр изображения ссылается на маску изображения.
size_t CGImageGetBitsPerComponent (
CGImageRef image
);
Возвращаемое значение
Количество битов, используемых в памяти для каждого компонента цвета указанного растрового изображения (или маски изображения). Возможные значения: 1, 2, 4 или 8. Например, для 16-битного цветового пространства RGB (A) функция будет возвращать значение 4 бита на компонент цвета.
size_t CGImageGetBitsPerPixel (
CGImageRef image
);
Возвращаемое значение
Количество битов, используемых в памяти для каждого пикселя указанного растрового изображения (или маски изображения).
Это должно помочь вам начать видеть, из чего состоит изображение. Чтобы воссоздать его за меньшее количество битов, это немного больше работы и временно требует больше памяти, пока после этого вы не сможете сбросить исходное изображение.