圖片處理
1, GPUImagePicture
從名稱就可以知道GPUImagePicture是GPUImage框架中處理與圖片相關(guān)的類,它的主要作用是將UIImage或CGImage轉(zhuǎn)化為紋理對(duì)象。GPUImagePicture繼承自GPUImageOutput,從而可以知道它能夠作為輸出,由于它沒有實(shí)現(xiàn)GPUImageInput協(xié)議,不能處理輸入。因此,常常作為響應(yīng)鏈源。
屬性介紹:
pixelSizeOfImage 圖像的像素大小。
hasProcessedImage 圖像是否已處理。
imageUpdateSemaphore 圖像處理的GCD信號(hào)量。
初始化方法:
- (id)initWithURL:(NSURL *)url
使用指定url的圖片來初始化GPUImagePicture
- (id)initWithImage:(UIImage *)newImageSource
使用指定的UIImage對(duì)象來初始化GPUImagePicture
- (id)initWithCGImage:(CGImageRef)newImageSource
使用指定的CGImageRef對(duì)象來初始化GPUImagePicture
- (id)initWithImage:(UIImage *)newImageSource smoothlyScaleOutput:(BOOL)smoothlyScaleOutput
使用指定的UIImage對(duì)象來初始化GPUImagePicture,是否按比例調(diào)整輸入圖像的尺寸
操作API
- (void)processImage;
進(jìn)行圖像處理實(shí)際操作。
- (CGSize)outputImageSize;
輸出image的大小
- (BOOL)processImageWithCompletionHandler:(void (^)(void))completion
進(jìn)行圖像處理實(shí)際的操作,completion為當(dāng)處理結(jié)束執(zhí)行的操作。
GPUImageView:UIView
從名稱就可以知道GPUImageView是GPUImage框架中顯示圖片相關(guān)的類。GPUImageView實(shí)現(xiàn)了GPUImageInput協(xié)議,從而可以知道它能夠接受GPUImageFramebuffer的輸入。因此,常常作為響應(yīng)鏈的終端節(jié)點(diǎn),用于顯示處理后的幀緩存。
初始化:
- (id)initWithFrame:(CGRect)frame;
-(id)initWithCoder:(NSCoder *)coder;
方法列表:
// 設(shè)置背景顏色
- (void)setBackgroundColorRed:(GLfloat)redComponent green:(GLfloat)greenComponent blue:(GLfloat)blueComponent alpha:(GLfloat)alphaComponent;
// 該方法未實(shí)現(xiàn)
- (void)setCurrentlyReceivingMonochromeInput:(BOOL)newValue;
屬性:
GPUImageFillModeType fillMode圖像的填充模式。
sizeInPixels 像素區(qū)域大小。
enabled 可交互
GPUImageUIElement UI渲染類
與GPUImagePicture類似可以作為響應(yīng)鏈源。與GPUImagePicture不同的是,它的數(shù)據(jù)不是來自圖片,而是來自于UIView或CALayer的渲染結(jié)果,類似于對(duì)UIView或CALayer截圖。GPUImageUIElement繼承自GPUImageOutput,從而可以知道它能夠作為輸出,由于它沒有實(shí)現(xiàn)GPUImageInput協(xié)議,不能處理輸入
初始化
- (id)initWithView:(UIView *)inputView;
- (id)initWithLayer:(CALayer *)inputLayer;
其他方法:
// 獲取像素大小
- (CGSize)layerSizeInPixels;
// 更新方法
- (void)update;
// 使用當(dāng)前時(shí)間的更新方法
- (void)updateUsingCurrentTime;
// 帶時(shí)間的更新方法
- (void)updateWithTimestamp:(CMTime)frameTime;
例子: 這個(gè)后面用到會(huì)補(bǔ)充
GPUImageView *gpImage = [[GPUImageView alloc]initWithFrame: CGRectMake(0, 0, 300, 300)];
self.view = gpImage;
gpImage.backgroundColor =[UIColor grayColor];
GPUImageUIElement *element = [[GPUImageUIElement alloc] initWithView:gpImage];
GPUImageWhiteBalanceFilter *filter = [[GPUImageWhiteBalanceFilter alloc] init];
[element addTarget:filter];
[filter addTarget:gpImage];
[filter useNextFrameForImageCapture];
[element update]; GPUImageView *gpImage = [[GPUImageView alloc]initWithFrame: CGRectMake(0, 0, 300, 300)];
self.view = gpImage;
gpImage.backgroundColor =[UIColor grayColor];
GPUImageUIElement *element = [[GPUImageUIElement alloc] initWithView:gpImage];
GPUImageWhiteBalanceFilter *filter = [[GPUImageWhiteBalanceFilter alloc] init];
[element addTarget:filter];
[filter addTarget:gpImage];
[filter useNextFrameForImageCapture];
[element update];