UIImage - це обгортка, байтами є CGImage або CIImage
Згідно з Apple Reference on 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, щоб вийти з потрібного формату, не знаючи, як він створений. У вашому випадку отримання растрової карти буде справою зателефонувати
- візуалізація: toBitmap: rowBytes: bounds: format: colorSpace:
Як додатковий бонус, ви можете почати робити приємні маніпуляції із зображенням, прив'язуючи фільтри до зображення. Це вирішує багато питань, коли зображення перевернуте вгору або його потрібно повертати / масштабувати тощо.