[英]Applying Sepia, RGB, GrayScale effect to UIImage
我想將濾鏡效果應用到我的應用程序中的圖像。 我是Open GL的新手,想在我的應用程序中將棕褐色,RGB,GrayScale效果應用於圖像 。 我已經實現了亮度,對比度,飽和度效果 ,但是無法找到任何關於灰度,RGB和棕褐色效果的解決方案。
提前致謝。
您沒有指定是要在OpenGL ES 1.1還是2.0中執行此操作,因此我假設您是指較新的2.0。 如果1.1確實是您的目標,則需要像Apple的GLImageProcessing示例中那樣使用混合模式。
對於OpenGL ES 2.0,您可以使用片段着色器來實現所有這些效果。 對於圖像的灰度版本,可以使用以下片段着色器僅提取亮度:
precision highp float;
varying vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
const highp vec3 W = vec3(0.2125, 0.7154, 0.0721);
void main()
{
float luminance = dot(texture2D(inputImageTexture, textureCoordinate).rgb, W);
gl_FragColor = vec4(vec3(luminance), 1.0);
}
對於棕褐色調,您可以使用我在此答案中演示的顏色矩陣操作着色器:
varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform lowp mat4 colorMatrix;
uniform lowp float intensity;
void main()
{
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);
lowp vec4 outputColor = textureColor * colorMatrix;
gl_FragColor = (intensity * outputColor) + ((1.0 - intensity) * textureColor);
}
的矩陣
self.colorMatrix = (GPUMatrix4x4){
{0.3588, 0.7044, 0.1368, 0},
{0.2990, 0.5870, 0.1140, 0},
{0.2392, 0.4696, 0.0912 ,0},
{0,0,0,0},
};
我不知道您所說的“ RGB效果”是什么意思。 也許您指的是顏色矩陣操作,在這種情況下,上面的內容同樣適用於您。
所有這些都是我的開源GPUImage框架中的內置過濾器(請參閱GPUImageBrightnessFilter,GPUImageContrastFilter,GPUImageSaturationFilter,GPUImageSepiaFilter和GPUImageColorMatrixFilter)。 如果您確實是OpenGL ES的新手,它將花費您很多代碼來設置場景,將UIImage用作紋理,對其運行頂點和片段着色器,檢索該圖像並保存它作為UIImage退出。 GPUImage將通過幾行Objective-C代碼為您完成所有這些工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.