图像滤镜算法之底片效果

2392160792.png

第二篇图像滤镜算法的文章,这篇文章种依然用我的照片来做实例,上图就是在Love2D种原图的图片效果。

现在我们要编写一段shader,将图片变为底片效果,最终效果如下图(又是一次自毁形象的行为):

屏幕快照 2016-02-29 下午10.05.17.png

这种效果也非常简单,在原有的RGB颜色值种,我们分别对三原色的数值取反,再将结果设置为最终颜色,则可得到底片效果。

代码如下:

function love.load()
	image = love.graphics.newImage("img.jpg")

	myShader = love.graphics.newShader[[
    vec4 effect( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ){
  		vec4 pixel = Texel(texture, texture_coords );
  		pixel.r = 1-pixel.r;
  		pixel.g = 1-pixel.g;
  		pixel.b = 1-pixel.b;
  		return pixel;
	}
  ]]
end

function love.draw()
	love.graphics.setShader(myShader)
	love.graphics.draw(image)
	love.graphics.setShader()
end

其中算法公式非常简单,公式如下:

R = 255 - R; G = 255 - G; B = 255 - B;

值得注意的是,在我们的shader种,颜色值取值范围为0-1,所以并不存在255这个数字,需要特殊注意。