簡體   English   中英

將棕褐色,RGB,灰度效果應用於UIImage

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM