日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。

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 */

};

?

?

但是在iOS7版本中,這個最后的參會類型發生了變化。看一下定義:

?

CGContextRef?CGBitmapContextCreate(void?*data,?size_t?width,

??size_t?height,?size_t?bitsPerComponent,?size_t?bytesPerRow,

??CGColorSpaceRef?space,?CGBitmapInfo?bitmapInfo)

很明顯最后一個參數由CGImageAlphaInfo?變化為?CGBitmapInfo,看一下這個類型的定義

?

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);

從頭到尾沒有發現值為1的枚舉量值。故在使用的時候會出現如下警告:

?

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

?

意思很明顯不過,類型不匹配非法。

以下給出解決方法:

第一種方法,定義宏:

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1

? ? ?#define kCGImageAlphaPremultipliedLast ?(kCGBitmapByteOrderDefault?|?kCGImageAlphaPremultipliedLast)

#else?

? ? ?#define kCGImageAlphaPremultipliedLast ?kCGImageAlphaPremultipliedLast

#endif

?

這樣就會直接映射出一個值為1的宏,原有方法不用改變。

?

第二種方法:原理和第一個一樣,目的 還是為了生產出一個為1的值,直接修改代碼。

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1

? ? int?bitmapInfo =?kCGBitmapByteOrderDefault?|?kCGImageAlphaPremultipliedLast;

#else

? ???int?bitmapInfo =?kCGImageAlphaPremultipliedLast;

#endif

?

? ??CGContextRef?context =?CGBitmapContextCreate(nil, CGContexWith*2, 290.0*2, 8, 4*CGContexWith*2, colorSpace, bitmapInfo);

?

其實所有的做法,不外乎為了使這里的值為1,類型匹配。你也直接可以傳1,不用麻煩的各種寫代碼。也可以直接進行類型強制轉換,這個你隨便。只是每個人的習慣不一樣,故,如何解決,自己參考決定 。

轉自http://hi.baidu.com/yunhuaikong/item/0fe2ccca5f041c7289ad9eac

可能以上的好多宏定義看不懂,但是不要緊,根據我的測試,只需要把報錯的那一句

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGContextRef ctx = CGBitmapContextCreate(0, size, size, 8, size * 4, colorSpace, kCGImageAlphaPremultipliedLast)最后面這個參數改成kCGBitmapByteOrderDefault?|?kCGImageAlphaPremultipliedLast即可

總結

以上是生活随笔為你收集整理的Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGB的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。