Как загрузить изображение из UIImagePicker с альфа
Я использую UIImagePicker для загрузки изображения, загруженного в библиотеку фотографий (на моем iPad), однако оно загружается без альфа-канала. Я проверил тройку, чтобы убедиться, что изображение есть. Разве он удаляется при синхронизации с itunes?
Вот код, который я использую для средства выбора изображений, когда он завершает сбор:
-(void)imagePickerController: (UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
//dissmiss picker
[imagePopOver dismissPopoverAnimated:YES];
//get the picker image
UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
//create image view for selected image
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);
imageView.center = CGPointMake(512, 384);
[imageLayer addSubview:imageView];
//release image and image view
[image release];
[imageView release];
}
Что я делаю неправильно? Я надеюсь, что это не "Доу!" момент.
3 ответа
UIImagePicker поддерживает изображения с альфа-каналом, как заявляет Kangoo в своем ответе.
Тем не менее, условия для его правильной работы сложнее, чем просто загрузить изображение через браузер в Photo Lib.
Прежде всего, имеет смысл использовать средство выбора изображений iOS, чтобы выбирать только из Camera Roll. На устройстве iOS можно сохранять изображения из Mail или Safari в Camera Roll, а другие приложения, поддерживающие изображения с альфа-каналом, позволяют сохранять в Camera Roll.
Изображения в остальной части библиотеки фотографий, кроме Camera Roll, могли бы быть получены с помощью синхронизации iTunes. И это проблема. Хотя iPhoto в OSX поддерживает изображения PNG с альфа-каналом, при синхронизации iTunes эти изображения передаются на устройство iOS, прозрачные области фона изображения становятся непрозрачными белыми.
Во-вторых, если вы настроите средство выбора изображений iOS, чтобы разрешить редактирование (квадратная обрезка, перемещение, масштабирование), тогда прозрачные области фона изображения станут непрозрачными черными!
Но если вы настроите средство выбора изображений iOS, чтобы НЕ разрешать редактирование, и выберете изображение из Camera Roll, то выбранное изображение (UIImage) может иметь альфа-канал.
На выбранном UIImage используйте CGImageGetAlphaInfo(pickImage.CGImage), чтобы получить CGImageAlphaInfo, и, если эта информация не является (kCGImageAlphaNone или kCGImageAlphaNoneSkipFirst или kCGImageAlphaNoneSkip), то есть альфа-изображение.
Не берите в голову. Это было, как я подозревал. Альфа-канал как-то теряется при импорте png через itunes (синхронизация). Должно ли быть преобразование в 24-бит? Я загрузил свое изображение в Интернет, а затем через браузер загрузил его в библиотеку фотографий, и теперь все в порядке.
Вы пробовали звонить:
imageView.backgroundColor = [UIColor clear]
Возможно, вам также нужно убедиться, что imageLayer также прозрачен. Я не уверен, как это было реализовано.