UIImage - это обертка, байты - CGImage или CIImage.
Согласно справочнику Apple по UIImage, объект является неизменным, и у вас нет доступа к резервным байтам. Хотя верно, что вы можете получить доступ к данным CGImage, если вы заполнили UIImage
их CGImage
(явным или неявным образом), они вернутся, NULL
если они UIImage
поддерживаются CIImage
и наоборот.
Объекты изображения не обеспечивают прямой доступ к данным, лежащим в их основе. Однако вы можете получить данные изображения в других форматах для использования в вашем приложении. В частности, вы можете использовать свойства cgImage и ciImage для получения версий изображения, которые совместимы с Core Graphics и Core Image, соответственно. Вы также можете использовать функции UIImagePNGRepresentation ( :) и UIImageJPEGRepresentation ( : _ :) для создания объекта NSData, содержащего данные изображения в формате PNG или JPEG.
Общие приемы, чтобы обойти эту проблему
Как указано, ваши варианты
- UIImagePNGRпредставление или JPEG
- Определите, есть ли на изображении данные поддержки CGImage или CIImage, и получите их там
Ни один из этих приемов не очень полезен, если вы хотите выводить данные, которые не являются данными ARGB, PNG или JPEG, а данные еще не поддержаны CIImage.
Моя рекомендация, попробуйте CIImage
При разработке вашего проекта для вас может иметь больше смысла вообще избегать UIImage и выбирать что-то еще. UIImage, как оболочка изображения Obj-C, часто поддерживается CGImage до такой степени, что мы принимаем это как должное. CIImage имеет тенденцию быть лучшим форматом обертки, поскольку вы можете использовать CIContext, чтобы получить нужный формат без необходимости знать, как он был создан. В вашем случае получение растрового изображения было бы вопросом вызова
- render: toBitmap: rowBytes: bounds: format: colorSpace:
В качестве дополнительного бонуса вы можете начать делать приятные манипуляции с изображением, цепляя фильтры на изображение. Это решает множество проблем, когда изображение переворачивается вверх ногами или его необходимо повернуть / масштабировать и т. Д.