iOS中的图像处理(三)——混合运算
有时候,单独对一张图像进行处理是很难或者根本达不到我们想要的效果的。一个好的滤镜效果的诞生,往往要经过很多复杂步骤、细致微调、图片应用效果观察以及很多图层叠加。
我在JSWidget上发现了一些常用混合算法,对应着一些常用混合模式,通过这些blend modes,我们可以指定两张图像如何混合。
不过在此之前,我们需要纯颜色图像和渐变图像来做辅助:
![]()
![]()
其中,overlay算法如下:
double calcOverlay(float b, float t) {return (b > 128.0f) ? 255.0f - 2.0f * (255.0f - t) * (255.0f - b) / 255.0f: (b * t * 2.0f) / 255.0f;}void filterOverlay(UInt8 *pixelBuf, UInt8 *pixedBlendBuf, UInt32 offset, void *context){int r = offset;int g = offset+1;int b = offset+2;int red = pixelBuf[r];int green = pixelBuf[g];int blue = pixelBuf[b];int blendRed = pixedBlendBuf[r];int blendGreen = pixedBlendBuf[g];int blendBlue = pixedBlendBuf[b]; pixelBuf[r] = SAFECOLOR(calcOverlay(red, blendRed));pixelBuf[g] = SAFECOLOR(calcOverlay(green, blendGreen));pixelBuf[b] = SAFECOLOR(calcOverlay(blue, blendBlue));}