- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize {
// If the image does not have an alpha layer, add one
UIImage *image = [self imageWithAlpha];
// Build a context that's the same dimensions as the new size
CGBitmapInfo info = CGImageGetBitmapInfo(image.CGImage);
CGContextRef context = CGBitmapContextCreate(NULL,
image.size.width,
image.size.height,
CGImageGetBitsPerComponent(image.CGImage),
0,
CGImageGetColorSpace(image.CGImage),
CGImageGetBitmapInfo(image.CGImage));
// Create a clipping path with rounded corners
CGContextBeginPath(context);
[self addRoundedRectToPath:CGRectMake(borderSize, borderSize, image.size.width - borderSize * 2, image.size.height - borderSize * 2)
context:context
ovalWidth:cornerSize
ovalHeight:cornerSize];
CGContextClosePath(context);
CGContextClip(context);
// Draw the image to the context; the clipping path will make anything outside the rounded rect transparent
CGContextDrawImage(context, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);
// Create a CGImage from the context
CGImageRef clippedImage = CGBitmapContextCreateImage(context);
CGContextRelease(context);
// Create a UIImage from the CGImage
UIImage *roundedImage = [UIImage imageWithCGImage:clippedImage];
CGImageRelease(clippedImage);
return roundedImage;
}
У меня есть метод, описанный выше, и я добавляю скругленные углы к изображениям профиля в Twitter. Для большинства изображений это работает потрясающе. Некоторые из них вызывают следующую ошибку:
: CGBitmapContextCreate: неподдерживаемая комбинация параметров: 8 целых бит / компонент; 32 бит / пиксель; 3-х компонентное цветовое пространство; kCGImageAlphaLast; 96 байт / строка.
Я провел некоторую отладку, и похоже, что единственное отличие от изображений, вызывающих ошибки, и тех, которые не являются, - это параметр CGImageGetBitmapInfo (image.CGImage) при создании контекста. Это выдает ошибку и приводит к тому, что контекст становится нулевым. Я попытался установить последний параметр kCGImageAlphaPremultipliedLast, но безрезультатно. На этот раз изображение нарисовано, но с гораздо меньшим качеством. Есть ли способ получить более качественное изображение наравне с остальными? Путь к изображению через Твиттер, поэтому не уверен, что они могут быть разными.
Я видел и другие вопросы, касающиеся этой ошибки. Никто из них не решил эту проблему. Я видел этот пост , но изображения с ошибками после этого полностью расплывчаты. И приведение ширины и высоты к NSInteger также не сработало. Ниже приведен скриншот двух изображений профиля и их качества. Первый вызывает ошибку.
Кто-нибудь знает, в чем здесь проблема?
Спасибо за тонну. Это убивает меня.