我有照片编辑视图,显示OpenGL ES 2.0视图 我想给出原始图像和过滤图像之间溶解的效果。是否可以使用OpenGL?
答案 0 :(得分:1)
是的,但您需要能够将这两个不同的图像绑定为单独的纹理,以便将其输入到溶解着色器中。有了这些之后,您可以使用如下所示的片段着色器:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform sampler2D inputImageTexture2;
uniform lowp float mixturePercent;
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate);
gl_FragColor = mix(textureColor, textureColor2, mixturePercent);
}
其中inputImageTexture
和inputImageTexture2
是要混合的纹理,而mixturePercent是第二个图像覆盖第一个图像的程度。
以上内容来自我的GPUImage开源框架,可能会使您的图像过滤工作变得更加容易。您可以将初始图像作为GPUImagePicture提供,向其添加GPUImageDissolveBlendFilter的目标,将另一个目标添加到GPUImagePicture以获取要应用的过滤器(或过滤器链),然后添加相同GPUImageDissolveBlendFilter的目标对于最后一个过滤器。通过改变混合上的mix
,您可以在原始图像和已过滤的图像之间进行溶解。
GPUImage在幕后使用OpenGL ES 2.0,但它抽象出一些与OpenGL ES的直接交互。
答案 1 :(得分:0)
理论上,您需要一些时间和像素因子的阈值函数。 为了更细致地描述方法,我们需要知道像素因子(alpha通道,亮度,第三纹理......)。 看看this示例。