CGContextRef CIImageRef详解
第一種?
先用UIImage對象加載一張圖片?
然后轉化成CGImageRef放到CGContext中去編輯
第二種?
用CGImageCreate函數創建CGImageRef?
然后把CGImageRef放到CGContext中去編輯
第三種?
用CGImageCreateCopy 或者 CGImageCreateCopyWithColorSpace?
函數拷貝
CGImageRef?CGImageCreate?(
????size_t width, //圖片的寬度
????size_t height, //圖片的高度
????size_t bitsPerComponent, //圖片每個顏色的bits,比如rgb顏色空間,有可能是5 或者 8 ==
????size_t bitsPerPixel, //每一個像素占用的buts,15 位24位 32位等等
????size_t bytesPerRow, //每一行占用多少bytes 注意是bytes不是bits? 1byte = 8bit
????CGColorSpaceRef colorspace, //顏色空間,比如rgb
????CGBitmapInfo bitmapInfo, //layout ,像素中bit的布局, 是rgba還是 argb,==
????CGDataProviderRef provider, //數據源提供者,url或者內存==
????const CGFloat decode[], //一個解碼數組
????bool shouldInterpolate, //抗鋸齒參數
????CGColorRenderingIntent intent //圖片渲染相關參數
?}
創建 image mask的一個途徑?
CGImageMaskCreate
給圖片加mask有兩種方法,?
第一種?
使用函數 CGImageCreateWithMask 或者 CGImageCreateWithMaskingColors 在圖片上直接打上mask?
這樣做對原來的圖片要求帶有 alpha通道,假如沒有,那么不會有半透明的效果
第二種?
使用 CGContextClipToMask 在圖形上下問的某個矩形區域打上mask,這樣做無論原先的圖片有沒有alpha通道,都可以實現半透明效果
位圖永遠是矩形形狀的
iphone支持圖片格式:?
JPEG, GIF, PNG, TIF, ICO, GMP, XBM, and CUR.
創建一張圖片,我們需要提供的一些東西?
A bitmap data source?
An optional Decode Array, 這個數組在渲染的時候會應用在每一個像素上面,是一個顏色變成另外一個顏色。?
An interpolation setting, 布爾值,縮放圖片的時候是否采用interpolation算法,具體這個算法不怎么了解?
渲染意向?
圖片尺寸?
Pixel Format:這個包括3個東西,?
1,Bits per component,每一個component有多少Bits?
2. Bits per pixel, 每一個像素占多少Bits?
3. Bytes per row,每一個占多少Bytes?
Color Spaces and Bitmap Layout,這里需要提供的幾個東西?
1,Whether a bitmap contains an alpha channel. 位圖是否包含alpha通道?
2。 color components是否已經乘以alpha value?
3。數據格式是浮點數還是整型?
Bitmap Layout是指color components的指是怎么指定的?
下面的參數 bitmapInfo就是 Bitmap Layout
GImageRef?CGImageCreate?(
????size_t width,
????size_t height,
????size_t bitsPerComponent,
????size_t bitsPerPixel,
????size_t bytesPerRow,
????CGColorSpaceRef colorspace,
????CGBitmapInfo bitmapInfo,
????CGDataProviderRef provider,
????const CGFloat decode[],
????bool shouldInterpolate,
????CGColorRenderingIntent intent
);///?選擇一個函數來創建圖像
CGImageRef?CGImageCreate?(
????size_t width,
????size_t height,
????size_t bitsPerComponent,
????size_t bitsPerPixel,
????size_t bytesPerRow,
????CGColorSpaceRef colorspace,
????CGBitmapInfo bitmapInfo,
????CGDataProviderRef provider,
????const CGFloat decode[],
????bool shouldInterpolate,
????CGColorRenderingIntent intent
); ?///?這個是比較萬能的函數,但是提供的參數也是非常的多
CGImageRef?CGImageCreateWithJPEGDataProvider?(
????CGDataProviderRef source,
????const CGFloat decode[],
????bool shouldInterpolate,
????CGColorRenderingIntent intent
); ? ? ? ? //?從jpeg源中創建圖像
CGImageRef?CGImageCreateWithPNGDataProvider?(
????CGDataProviderRef source,
????const CGFloat decode[],
????bool shouldInterpolate,
????CGColorRenderingIntent intent
); ? ? //?從png源中創建圖像
CGImageRef?CGImageCreateWithImageInRect?(
????CGImageRef image,
????CGRect rect
); ? ? //?從一張圖片的某塊區域創建圖片,類似截圖
CGImageRef?CGImageSourceCreateImageAtIndex?(
????CGImageSourceRef isrc,
????size_t index,
????CFDictionaryRef options
); ? ? //?從一個圖片源中創建圖片,這個圖片源可能包含不止一張圖片,0表示第一張
CGImageRef?CGImageSourceCreateThumbnailAtIndex?(
????CGImageSourceRef isrc,
????size_t index,
????CFDictionaryRef options
); ? ? //?創建一個縮略圖從一個圖片源中,這個圖片源可能包含不止一張圖片,0表示第一張
CGImageRef?CGBitmapContextCreateImage?(
????CGContextRef c
); ? ? //?從一個圖形上下文中創建圖片
CGImageRef?CGImageCreateCopy?(
????CGImageRef image
); ? ? //?拷貝一張圖片
CGImageRef?CGImageCreateCopyWithColorSpace?(
????CGImageRef image,
????CGColorSpaceRef colorspace
); ? ? //?拷貝
一張圖片,替換原來的顏色空間
從jpeg創建圖片
void MyCreateAndDrawBitmapImage (CGContextRef myContext,
?????????????????????????????????CGRect myContextRect,
?????????????????????????????????const char *filename);
{?????CGImageRef image;
?????CGDataProviderRef provider;
?????CFStringRef path;
?????CFURLRef url;
?????path = CFStringCreateWithCString (NULL, filename,
?????????????????????????kCFStringEncodingUTF8);
?????url = CFURLCreateWithFileSystemPath (NULL, path, // 2
?????????????????????????????kCFURLPOSIXPathStyle, NO);
?????CFRelease(path);
?????provider = CGDataProviderCreateWithURL (url);// 3
?????CFRelease (url);
?????image = CGImageCreateWithJPEGDataProvider (provider,// 4
?????????????????????????????????????NULL,
?????????????????????????????????????true,
????????????????????????????????????kCGRenderingIntentDefault);
?????CGDataProviderRelease (provider);// 5
?????CGContextDrawImage (myContext, myContextRect, image);// 6
?????CGImageRelease (image);// 7
}CGImageRef CGImageMaskCreate (
?????????size_t width,
?????????size_t height,
?????????size_t bitsPerComponent,
?????????size_t bitsPerPixel,
?????????size_t bytesPerRow,
?????????CGDataProviderRef provider,
?????????const float decode[],
?????????int shouldInterpolate
); ?//?從一個已經存在的圖形上下文中創建一個CGLayerRef
CGLayerRef CGLayerCreateWithContext (
????CGContextRef context,
????CGSize size,
????CFDictionaryRef auxiliaryInfo
);CGSize CGLayerGetSize (
????CGLayerRef layer
);然后從CGLayerRef中得到CGContextRef,就是圖形上下文
CGContextRef CGLayerGetContext (
????CGLayerRef layer
);接著在這個CGContextRef中繪畫
Draw the CGLayer to the Destination Graphics Context
void CGContextDrawLayerInRect (
????CGContextRef context,
????CGRect rect,
????CGLayerRef layer
);void CGContextDrawLayerAtPoint (
????CGContextRef context,
????CGPoint point,
????CGLayerRef layer
);Transparency Layers 陰影?
Transparency Layers 給我們很方便的畫陰影
void CGContextBeginTransparencyLayer ( CGContextRef context, CFDictionaryRef auxiliaryInfo );?
函數第二個參數可以傳遞一些設置參數,沒有就傳NULL?
看下面的示例代碼
CGSize myShadowOffset = CGSizeMake (10, -20);// 設置陰影的偏移量
CGContextSetShadow (myContext, myShadowOffset, 5); // 第三個參數表示透明和模糊度
CGContextBeginTransparencyLayer (myContext, NULL);
CGContextSetRGBFillColor (myContext, 0, 1, 0, 1);
CGContextFillRect (myContext, CGRectMake (wd/3+ 50,ht/2 ,wd/4,ht/4));
CGContextEndTransparencyLayer (myContext);
CGContextBeginTransparencyLayer (myContext, NULL);// 4
CGContextSetRGBFillColor (myContext, 0, 0, 1, 1);
CGContextFillRect (myContext, CGRectMake (wd/3-50,ht/2-100,wd/4,ht/4));
CGContextSetRGBFillColor (myContext, 1, 0, 0, 1);
CGContextFillRect (myContext, CGRectMake (wd/3,ht/2-50,wd/4,ht/4));
CGContextEndTransparencyLayer (myContext);
轉載于:https://www.cnblogs.com/Free-Thinker/p/5112738.html
總結
以上是生活随笔為你收集整理的CGContextRef CIImageRef详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Sublime Text 3 代码格式化
- 下一篇: UITableView 性能优化