【问题标题】:Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitmapinfo' (aka) 'enum CGBitmapInfo')从枚举类型“enum CGImageAlphaInfo”到不同枚举类型“CGBitmapinfo”的隐式转换(又名“enum CGBitmapInfo”)
【发布时间】:2013-09-26 03:11:33
【问题描述】:

我正在 xCode5 上将一个旧的 iOS 5 项目转换为 iOS6.0,大多数警告和错误已得到修复,但仅针对这个。关于如何重写代码以避免编译器警告的任何建议。

#define kBitsPerComponent 8
#define kBitmapInfo       kCGImageAlphaPremultipliedLast

 - (UIImage*)scaleToSize:(CGSize)size :(UIImage *)image
{
CGBitmapInfo bitmapInfo = kBitmapInfo;
size_t bytesPerRow = size.width * 4.0;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, size.width,
                                             size.height, kBitsPerComponent,
                                             bytesPerRow, colorSpace, bitmapInfo);

CGRect rect = CGRectMake(0.0f, 0.0f, size.width, size.height);
CGContextDrawImage(context, rect, image.CGImage);

CGImageRef scaledImageRef = CGBitmapContextCreateImage(context);
UIImage* scaledImage = [UIImage imageWithCGImage:scaledImageRef];

CGImageRelease(scaledImageRef);
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);

return scaledImage;
}

代码给出了一个警告,从枚举类型“enum CGImageAlphaInfo”隐式转换到不同的枚举类型“CGBitmapinfo”(又名)“enum CGBitmapInfo”)

如果有人可以帮助修改代码,将不胜感激。

【问题讨论】:

    标签: ios enums core-graphics


    【解决方案1】:

    来自文档:

    用于指定 alpha 通道信息的常量使用 CGImageAlphaInfo 类型声明,但可以安全地传递给此参数。

    所以你可以使用强制转换来抑制警告:

    CGBitmapInfo bitmapInfo = (CGBitmapInfo) kBitmapInfo;
    

    【讨论】:

    • 很高兴找到这个。 SO上的很多答案都使用了触发警告的常量,直到现在还非常令人费解,因为Xcode中的“跳转到定义”清楚地表明它们是完全不同的enums,并且不清楚它们在功能上是否可以互换。
    • CGImageAlphaInfo 是 CGBitmapInfo 的一部分(前 5 位),它们不可互换,但一个是另一个的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多