usenextframeforimageimage capturee什么作用

  饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。纯的颜色都是高度饱和的,如鲜红,鲜绿。混杂上白色,灰色或其他色调的颜色,是不饱和的颜色,如绛紫,粉红,黄褐等。完全不饱和的颜色根本没有色调,如黑白之间的各种灰色。
  在GPUImage中使用GPUImageSaturationFilter类来实现调整图像的饱和度
  片段着色
varying highp vec2 textureC
uniform sampler2D inputImageT
uniform lowp float
// Values from "Graphics Shaders: Theory and Practice" by Bailey and Cunningham
const mediump vec3 luminanceWeighting = vec3(0.4, 0.0721);
void main()
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp float luminance = dot(textureColor.rgb, luminanceWeighting);
lowp vec3 greyScaleColor = vec3(luminance);
gl_FragColor = vec4(mix(greyScaleColor, textureColor.rgb, saturation), textureColor.w);
&  具体应用
+ (UIImage *)changeValueForSaturationFilter:(float)value image:(UIImage *)
GPUImageSaturationFilter *filter = [[GPUImageSaturationFilter alloc] init];
filter.saturation =
[filter forceProcessingAtSize:image.size];
GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image];
[pic addTarget:filter];
[pic processImage];
[filter useNextFrameForImageCapture];
return [filter imageFromCurrentFramebuffer];
            高饱和度                          低饱和度【黑白】
阅读(...) 评论()GPUImage 添加混合模式方法
[问题点数:20分,无满意结帖,结帖人Arodung]
GPUImage 添加混合模式方法
[问题点数:20分,无满意结帖,结帖人Arodung]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。&&国之画&&布布分享&&&& &&&&
版权所有 京ICP备号-2
迷上了代码!  今天来学习一下一个简单滤镜使用的流程,通过调节亮度滤镜来了解。先将GPUImage库导入到项目中,引入头文件"GPUImage.h"
   &&一、创建亮度滤镜对象
&  & &GPUImageBrightnessFilter *filter = [[GPUImageBrightnessFilter alloc] init],经过alloc init之后,程序为我们创建了顶点数组以及帧缓冲区,纹理,并绑定为当前使用的对象。
  1.为顶点着色添加属性
   首先我们来看一该滤镜的顶点着色器字符串
attribute vec4
attribute vec4 inputTextureC
varying vec2 textureC
void main()
gl_Position =
textureCoordinate = inputTextureCoordinate.
&我们了解到该顶点有2个需要添加的属性position,inputTextureCoordinate.我们需要在程序中添加这2个属性,通过下列方法来添加
- (void)initializeA
[filterProgram addAttribute:@"position"];
[filterProgram addAttribute:@"inputTextureCoordinate"];
// Override this, calling back to this super method, in order to add new attributes to your vertex shader
& 2.片段着色提供uniform  
varying highp vec2 textureC
uniform sampler2D inputImageT
uniform lowp float
void main()
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
gl_FragColor = vec4((textureColor.rgb + vec3(brightness)), textureColor.w);
  brightnessUniform = [filterProgram uniformIndex:@"brightness"]
  filterInputTextureUniform = [filterProgram uniformIndex:@"inputImageTexture"]
  3.启用顶点数组
  glEnableVertexAttribArray(filterPositionAttribute);
& & & glEnableVertexAttribArray(filterTextureCoordinateAttribute)
&4.创建纹理
- (void)generateT
glActiveTexture(GL_TEXTURE1);
glGenTextures(1, &_texture);
glBindTexture(GL_TEXTURE_2D, _texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, _textureOptions.minFilter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, _textureOptions.magFilter);
// This is necessary for non-power-of-two textures
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, _textureOptions.wrapS);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, _textureOptions.wrapT);
// TODO: Handle mipmaps
   5.创建帧缓冲区
&   &&glGenFramebuffers(1, &framebuffer)
  6.帧缓冲绑定纹理
  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _texture, 0);
&  二、设置亮度值
  filter.brightness = value
  三、设置纹理尺寸
 & &[filter forceProcessingAtSize:image.size]
  四、创建GPUImagePicture对象
& & &GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image]
  五、向创建好的GPUImagePicture对象添加target
  六,处理图像
  [pic processImage]
进行图像渲染并绘制
glClearColor(backgroundColorRed, backgroundColorGreen, backgroundColorBlue, backgroundColorAlpha);
glClear(GL_COLOR_BUFFER_BIT);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, [firstInputFramebuffer texture]);
glUniform1i(filterInputTextureUniform, 2);
glVertexAttribPointer(filterPositionAttribute, 2, GL_FLOAT, 0, 0, vertices);
glVertexAttribPointer(filterTextureCoordinateAttribute, 2, GL_FLOAT, 0, 0, textureCoordinates);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
  七、[filter useNextFrameForImageCapture]
&  八、获取处理后的图像
  image =&[filter imageFromCurrentFramebuffer]
GPUImageBrightnessFilter *filter = [[GPUImageBrightnessFilter alloc] init];
filter.brightness =
[filter forceProcessingAtSize:image.size];
GPUImagePicture *pic = [[GPUImagePicture alloc] initWithImage:image];
[pic addTarget:filter];
[pic processImage];
[filter useNextFrameForImageCapture];
image = [filter imageFromCurrentFramebuffer];
阅读(...) 评论()

我要回帖

更多关于 dism captureimage 的文章

 

随机推荐