Мне нравится преобразовывать файл .cpbitmap в формат изображения, который может отображаться в UIImageView. Есть ли способ сделать это в Objective-C? Приложение будет работать на jailbroken Devices, поэтому это не имеет большого значения.Как преобразовать .cpbitmap в удобочитаемое изображение (png, jpg, jpeg ...)
ответ
Импорт частного AppSupport.framework
и объявить этот
CFArrayRef CPBitmapCreateImagesFromData(CFDataRef cpbitmap, void*, int, void*);
Эта функция возвращает массив CGImageRef
объектов. Первый аргумент - данные из файла .cpbitmap
. Другие аргументы мне неизвестны (один из них, вероятно, CFAllocatorRef
), поэтому я проверил, как iOS вызывает эту функцию и использует те же значения. Вот как я это сделал
CPBitmapCreateImagesFromData([NSData dataWithContentsOfFile:@"LockBackground.cpbitmap"], NULL, 1, NULL);
Спасибо за ваш ответ. У меня много вопросов. Где я должен объявить «CFArrayRef CPBitmapCreateImagesFromData (CFDataRef cpbitmap, void *, int, void *);», следует объявить его в файле заголовка AppSupport.framework? И другой вопрос: где вы получили AppSupport.framework, когда я импортирую, если отсюда: https://github.com/nst/iOS-Runtime-Headers. Я получаю множественные ошибки. Не могли бы вы объяснить мне немного больше? –
Вы можете объявить его в любом месте в своем проекте. Затем вам нужно импортировать фреймворк. Поскольку это частная структура, вам нужно найти ее с помощью Finder и перетащить ее в папку «Frameworks» вашего проекта. Рамки можно найти здесь '/ Applications/Xcode.app/Содержание/Разработчик/Платформы/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks/AppSupport.framework' – creker
Привет, это помогло мне много. Извините за вопрос, но как вы получите UIImage? –
Я также хотел бы преобразовать HomeBackground.cpbitmap/LockBackground.cpbitmap из библиотеки/трамплин.
Следующие работали для меня: @creker: Спасибо!
CFArrayRef CPBitmapCreateImagesFromData(CFDataRef cpbitmap, void*, int, void*);
CFArrayRef someArrayRef = CPBitmapCreateImagesFromData((__bridge CFDataRef)([NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"LockBackground" ofType:@"cpbitmap"]]), NULL, 1, NULL);
NSArray *array = (__bridge NSArray*)someArrayRef;
UIImage *test = [UIImage imageWithCGImage:(__bridge CGImageRef)(array[0])];
Я добавил точку останова после последней строки и извлек изображение с помощью XCode -> test -> Preview.
Вы получили это от работы? – newenglander
Нет, не совсем ... –
Я сомневаюсь, что вы все еще считаете, что это было более года назад, но вот мой код _working_: https://github.com/ZaneH/unsplashwallpaper/blob/master/Listener.xm#L185 –