Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB

本文主要是介绍Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在使用xcode5 sdk iOS7环境,创建图形上下文进行图形绘制,合并,裁剪,特效处理等时避免不了使用如下方法创建位图:

在 iOS7以前,是使用如下方法创建的:

CG_EXTERN CGContextRef CGBitmapContextCreate(void *data, size_t width,

  size_t height, size_t bitsPerComponent, size_t bytesPerRow,

  CGColorSpaceRef space,CGImageAlphaInfo bitmapInfo)

注意最后一个参数类型是 CGImageAlphaInfo 枚举类型中的kCGImageAlphaPremultipliedLast值。其整型值为1。


<span style="font-size:14px;">typedef CF_ENUM(uint32_t, CGImageAlphaInfo) {kCGImageAlphaNone,               /* For example, RGB. */kCGImageAlphaPremultipliedLast,  /* For example, premultiplied RGBA */kCGImageAlphaPremultipliedFirst, /* For example, premultiplied ARGB */kCGImageAlphaLast,               /* For example, non-premultiplied RGBA */kCGImageAlphaFirst,              /* For example, non-premultiplied ARGB */kCGImageAlphaNoneSkipLast,       /* For example, RBGX. */kCGImageAlphaNoneSkipFirst,      /* For example, XRGB. */kCGImageAlphaOnly                /* No color data, alpha data only */};</span>

但是在iOS7版本中,这个最后的参会类型发生了变化。看一下定义:

CGContextRef CGBitmapContextCreate(void *data,size_t width,

  size_t height,size_t bitsPerComponent,size_t bytesPerRow,

  CGColorSpaceRef space,CGBitmapInfo bitmapInfo)

很明显最后一个参数由CGImageAlphaInfo 变化为 CGBitmapInfo,看一下这个类型的定义


<span style="font-size:14px;">typedef CF_OPTIONS(uint32_t, CGBitmapInfo){kCGBitmapAlphaInfoMask = 0x1F,kCGBitmapFloatComponents = (1 << 8),kCGBitmapByteOrderMask = 0x7000,kCGBitmapByteOrderDefault = (0 << 12),kCGBitmapByteOrder16Little = (1 << 12),kCGBitmapByteOrder32Little = (2 << 12),kCGBitmapByteOrder16Big = (3 << 12),kCGBitmapByteOrder32Big = (4 << 12)} CF_ENUM_AVAILABLE(10_4, 2_0);</span>

从头到尾没有发现值为1的枚举量值。故在使用的时候会出现如下警告:


Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitmapInfo' (aka 'enum CGBitmapInfo')


意思很明显不过,类型不匹配非法。

以下给出解决方法:

第一种方法,定义宏:

<span style="font-size:14px;">#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1#define kCGImageAlphaPremultipliedLast  (kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast)#else #define kCGImageAlphaPremultipliedLast  kCGImageAlphaPremultipliedLast#endif</span>

这样就会直接映射出一个值为1的宏,原有方法不用改变。


第二种方法:原理和第一个一样,目的 还是为了生产出一个为1的值,直接修改代码。

<span style="font-size:14px;">#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;#elseint bitmapInfo = kCGImageAlphaPremultipliedLast;#endifCGContextRef context = CGBitmapContextCreate(nil, CGContexWith*2, 290.0*2, 8, 4*CGContexWith*2, colorSpace, bitmapInfo);</span>

其实所有的做法,不外乎为了使这里的值为1,类型匹配。你也直接可以传1,不用麻烦的各种写代码。也可以直接进行类型强制转换,这个你随便。只是每个人的习惯不一样,故,如何解决,自己参考决定 。

这篇关于Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1041953

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

Caused by: org.hibernate.MappingException: Could not determine type for: org.cgh.ssh.pojo.GoodsType,

MappingException:这个主要是类映射上的异常,Could not determine type for: org.cgh.ssh.pojo.GoodsType,这句话表示GoodsType这个类没有被映射到

兔子--The method setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent) from the type

notification.setLatestEventInfo(context, title, message, pendingIntent);     不建议使用 低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。  Intent  intent = new Intent(

C++11中新引入的enum类型

一、引言         在C++11中,引入了一个新的枚举类型——enum class(或称为作用域枚举类型),它相较于传统的enum类型有几个关键的不同点。enum class提供了更强的类型检查和封装,减少了命名冲突的可能性,并允许更加清晰地表达枚举的意图。 二、传统枚举(enum)的缺点         在C++11之前,枚举(enum)类型是隐式转换为整型的,这可能会导致一些意料之

AI模型:追求全能还是专精?-- 之6 语言复杂度类别(Category 0~3 类)和语言功能性类型(Type 0~Ⅲ 型)之2

Q17、我前面说过,语言复杂度的0~3级(Category 0~3)表示了语言的的上下文相关性 : 完全不相关, 单相关的 单词上下文, 双相关的句子上下文 全相关的文章上下文 。我准备翻译为 Context - irrelative /relative/correlative/ full-correlative,显式表达了语言复杂度的0~3级(Category 0~3)区别的上下文相关性是一种关

【TS高频面试题】interface与type的区别

参考文章 一、基本概念 1. type(类型别名) 用来给一个类型起新名字,使用 type 创建类型别名。 2. interface(接口) 专门用于定义对象的结构(比如属性和方法) 二、相同点 (1)都可以描述对象或函数 interface interface User {name: stringage: number}interface SetUser {(name: st

ssh登录服务器报错“no matching host key type found. Their offer: ssh-rsa,ssh-dss”解决方法

这个错误表明你尝试使用 ssh 连接到远程服务器时,客户端和服务器之间没有匹配的 host key 类型。具体来说,远程服务器提供了 ssh-rsa 和 ssh-dss 类型的 host key,但你的 SSH 客户端配置可能不再支持这些较旧的算法。最近的 OpenSSH 版本默认禁用了不够安全的算法,如 ssh-rsa 和 ssh-dss。 解决方法 临时启用 ssh-rsa: 你可以在

Numpy中type()、ndim、shape、size、dtype、astype的用法

目录 numpy基础介绍示例分析及总结:itemsize、nbytes函数 numpy基础介绍 Numpy 补充了Python语言所欠缺的数值计算能力,是其它数据分析及机器学习库的底层库。因其完全标准C语言实现,运行效率充分优化。最重要一点是开源免费。numpy的核心是矩阵(即多维数组)。 示例 import numpy as nparr =np.array([[1,2,3]

struts2 result type= redirect redirectAction chain dispatcher等类型

struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.