gpt4 book ai didi

iphone - <错误>:CGBitmapContextCreate:不支持的参数组合与较低分辨率的图像

转载 作者:行者123 更新时间:2023-12-01 18:30:28 26 4
gpt4 key购买 nike

- (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也无济于事。这次绘制的图像质量较差。有没有办法获得与其他图像同等的高质量图像?图像的路径是通过Twitter,因此不确定它们是否可以拉出其他图像。

我也看到了有关此错误的其他问题。没有人能解决这个问题。我看到了 this post,但此后错误图像完全模糊。并且将宽度和高度转换为NSInteger也不起作用。以下是两个配置文件图像及其质量的屏幕截图。第一个导致错误。



有谁知道这里的问题是什么?

万分感谢。这已经杀了我。

最佳答案

iOS不支持kCGImageAlphaLast。您需要使用kCGImageAlphaPremultipliedLast

您还需要处理初始图像的比例。您当前的代码没有,因此如果缩放比例为2.0,则会对图像进行下采样。

您可以使用UIKit函数和类更简单地编写整个函数。 UIKit将为您服务。您只需要在要求原始图像的比例来创建图形上下文时传递它。

- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize {
// If the image does not have an alpha layer, add one
UIImage *image = [self imageWithAlpha];

UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); {
CGRect imageRect = (CGRect){ CGPointZero, image.size };
CGRect borderRect = CGRectInset(imageRect, borderSize, borderSize);
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:borderRect
byRoundingCorners:UIRectCornerAllCorners
cornerRadii:CGSizeMake(cornerSize, cornerSize)];
[path addClip];
[image drawAtPoint:CGPointZero];
}
UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return roundedImage;
}

如果您的 imageWithAlpha方法本身从另一个 UIImage创建一个 UIImage,则它还需要传播比例。

关于iphone - <错误>:CGBitmapContextCreate:不支持的参数组合与较低分辨率的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9508163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com