Skip to content

Commit

Permalink
Merge pull request BradLarson#31 from alariccole/master
Browse files Browse the repository at this point in the history
Haze filter addition
  • Loading branch information
BradLarson committed Mar 21, 2012
2 parents a142788 + 373c3a1 commit 15879db
Show file tree
Hide file tree
Showing 7 changed files with 128 additions and 1 deletion.
Expand Up @@ -67,6 +67,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
case GPUIMAGE_EXPOSURE: cell.textLabel.text = @"Exposure"; break;
case GPUIMAGE_SHARPEN: cell.textLabel.text = @"Sharpen"; break;
case GPUIMAGE_GAMMA: cell.textLabel.text = @"Gamma"; break;
case GPUIMAGE_HAZE: cell.textLabel.text = @"Haze"; break;
case GPUIMAGE_CROP: cell.textLabel.text = @"Crop"; break;
case GPUIMAGE_TRANSFORM: cell.textLabel.text = @"Transform (2-D)"; break;
case GPUIMAGE_TRANSFORM3D: cell.textLabel.text = @"Transform (3-D)"; break;
Expand Down
@@ -1,7 +1,7 @@
#import <UIKit/UIKit.h>
#import "GPUImage.h"

typedef enum { GPUIMAGE_SATURATION, GPUIMAGE_CONTRAST, GPUIMAGE_BRIGHTNESS, GPUIMAGE_EXPOSURE, GPUIMAGE_SHARPEN, GPUIMAGE_TRANSFORM, GPUIMAGE_TRANSFORM3D, GPUIMAGE_CROP, GPUIMAGE_GAMMA, GPUIMAGE_SEPIA, GPUIMAGE_COLORINVERT, GPUIMAGE_GRAYSCALE, GPUIMAGE_PIXELLATE, GPUIMAGE_SOBELEDGEDETECTION, GPUIMAGE_SKETCH, GPUIMAGE_TOON, GPUIMAGE_KUWAHARA, GPUIMAGE_VIGNETTE, GPUIMAGE_GAUSSIAN, GPUIMAGE_GAUSSIAN_SELECTIVE, GPUIMAGE_FASTBLUR, GPUIMAGE_SWIRL, GPUIMAGE_DISSOLVE, GPUIMAGE_CHROMAKEY, GPUIMAGE_MULTIPLY, GPUIMAGE_OVERLAY, GPUIMAGE_LIGHTEN, GPUIMAGE_DARKEN, GPUIMAGE_COLORBURN, GPUIMAGE_COLORDODGE, GPUIMAGE_SCREENBLEND, GPUIMAGE_DIFFERENCEBLEND, GPUIMAGE_EXCLUSIONBLEND, GPUIMAGE_HARDLIGHTBLEND, GPUIMAGE_SOFTLIGHTBLEND, GPUIMAGE_CUSTOM, GPUIMAGE_FILECONFIG, GPUIMAGE_NUMFILTERS} GPUImageShowcaseFilterType;
typedef enum { GPUIMAGE_SATURATION, GPUIMAGE_CONTRAST, GPUIMAGE_BRIGHTNESS, GPUIMAGE_EXPOSURE, GPUIMAGE_SHARPEN, GPUIMAGE_TRANSFORM, GPUIMAGE_TRANSFORM3D, GPUIMAGE_CROP, GPUIMAGE_GAMMA, GPUIMAGE_HAZE, GPUIMAGE_SEPIA, GPUIMAGE_COLORINVERT, GPUIMAGE_GRAYSCALE, GPUIMAGE_PIXELLATE, GPUIMAGE_SOBELEDGEDETECTION, GPUIMAGE_SKETCH, GPUIMAGE_TOON, GPUIMAGE_KUWAHARA, GPUIMAGE_VIGNETTE, GPUIMAGE_GAUSSIAN, GPUIMAGE_GAUSSIAN_SELECTIVE, GPUIMAGE_FASTBLUR, GPUIMAGE_SWIRL, GPUIMAGE_DISSOLVE, GPUIMAGE_CHROMAKEY, GPUIMAGE_MULTIPLY, GPUIMAGE_OVERLAY, GPUIMAGE_LIGHTEN, GPUIMAGE_DARKEN, GPUIMAGE_COLORBURN, GPUIMAGE_COLORDODGE, GPUIMAGE_SCREENBLEND, GPUIMAGE_DIFFERENCEBLEND, GPUIMAGE_EXCLUSIONBLEND, GPUIMAGE_HARDLIGHTBLEND, GPUIMAGE_SOFTLIGHTBLEND, GPUIMAGE_CUSTOM, GPUIMAGE_FILECONFIG, GPUIMAGE_NUMFILTERS} GPUImageShowcaseFilterType;

@interface ShowcaseFilterViewController : UIViewController
{
Expand Down
Expand Up @@ -156,6 +156,17 @@ - (void)setupFilter;
[self.filterSettingsSlider setValue:1.0];

filter = [[GPUImageGammaFilter alloc] init];
}; break;
case GPUIMAGE_HAZE:
{
self.title = @"Haze / UV";
self.filterSettingsSlider.hidden = NO;

[self.filterSettingsSlider setMinimumValue:-0.2];
[self.filterSettingsSlider setMaximumValue:.2];
[self.filterSettingsSlider setValue:.2];

filter = [[GPUImageHazeFilter alloc] init];
}; break;
case GPUIMAGE_CROP:
{
Expand Down Expand Up @@ -435,6 +446,7 @@ - (IBAction)updateFilterFromSlider:(id)sender;
case GPUIMAGE_EXPOSURE: [(GPUImageExposureFilter *)filter setExposure:[(UISlider *)sender value]]; break;
case GPUIMAGE_SHARPEN: [(GPUImageSharpenFilter *)filter setSharpness:[(UISlider *)sender value]]; break;
case GPUIMAGE_GAMMA: [(GPUImageGammaFilter *)filter setGamma:[(UISlider *)sender value]]; break;
case GPUIMAGE_HAZE: [(GPUImageHazeFilter *)filter setDistance:[(UISlider *)sender value]]; break;
case GPUIMAGE_DISSOLVE: [(GPUImageDissolveBlendFilter *)filter setMix:[(UISlider *)sender value]]; break;
case GPUIMAGE_CHROMAKEY: [(GPUImageChromaKeyBlendFilter *)filter setThresholdSensitivity:[(UISlider *)sender value]]; break;
case GPUIMAGE_KUWAHARA: [(GPUImageKuwaharaFilter *)filter setRadius:round([(UISlider *)sender value])]; break;
Expand Down
8 changes: 8 additions & 0 deletions framework/GPUImage.xcodeproj/project.pbxproj
Expand Up @@ -9,6 +9,8 @@
/* Begin PBXBuildFile section */
0DF3FA2B14FA00C9006AF7D9 /* GPUImageVignetteFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DF3FA2914FA00C9006AF7D9 /* GPUImageVignetteFilter.h */; };
0DF3FA2C14FA00C9006AF7D9 /* GPUImageVignetteFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DF3FA2A14FA00C9006AF7D9 /* GPUImageVignetteFilter.m */; };
6D13DB7D151A697C000B23BA /* GPUImageHazeFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D13DB7B151A697C000B23BA /* GPUImageHazeFilter.h */; };
6D13DB7E151A697C000B23BA /* GPUImageHazeFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D13DB7C151A697C000B23BA /* GPUImageHazeFilter.m */; };
6EE27493150E8FC60040DDB6 /* GPUImageGrayscaleFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EE27491150E8FC50040DDB6 /* GPUImageGrayscaleFilter.h */; };
6EE27494150E8FC60040DDB6 /* GPUImageGrayscaleFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EE27492150E8FC50040DDB6 /* GPUImageGrayscaleFilter.m */; };
B81521A214F1BA6A00F105F8 /* GPUImageColorMatrixFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = B81521A014F1BA6A00F105F8 /* GPUImageColorMatrixFilter.h */; };
Expand Down Expand Up @@ -139,6 +141,8 @@
0D9D91AE15011CA200A5BC83 /* GPUImageGaussianSelectiveBlurFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GPUImageGaussianSelectiveBlurFilter.m; path = Source/GPUImageGaussianSelectiveBlurFilter.m; sourceTree = SOURCE_ROOT; };
0DF3FA2914FA00C9006AF7D9 /* GPUImageVignetteFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPUImageVignetteFilter.h; path = Source/GPUImageVignetteFilter.h; sourceTree = SOURCE_ROOT; };
0DF3FA2A14FA00C9006AF7D9 /* GPUImageVignetteFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GPUImageVignetteFilter.m; path = Source/GPUImageVignetteFilter.m; sourceTree = SOURCE_ROOT; };
6D13DB7B151A697C000B23BA /* GPUImageHazeFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPUImageHazeFilter.h; sourceTree = SOURCE_ROOT; };
6D13DB7C151A697C000B23BA /* GPUImageHazeFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GPUImageHazeFilter.m; sourceTree = SOURCE_ROOT; };
6EE27491150E8FC50040DDB6 /* GPUImageGrayscaleFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPUImageGrayscaleFilter.h; path = Source/GPUImageGrayscaleFilter.h; sourceTree = SOURCE_ROOT; };
6EE27492150E8FC50040DDB6 /* GPUImageGrayscaleFilter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GPUImageGrayscaleFilter.m; path = Source/GPUImageGrayscaleFilter.m; sourceTree = SOURCE_ROOT; };
B81521A014F1BA6A00F105F8 /* GPUImageColorMatrixFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPUImageColorMatrixFilter.h; path = Source/GPUImageColorMatrixFilter.h; sourceTree = SOURCE_ROOT; };
Expand Down Expand Up @@ -299,6 +303,8 @@
BC982B7D14F09F980001FF6F /* GPUImageGammaFilter.m */,
B81521A014F1BA6A00F105F8 /* GPUImageColorMatrixFilter.h */,
B81521A114F1BA6A00F105F8 /* GPUImageColorMatrixFilter.m */,
6D13DB7B151A697C000B23BA /* GPUImageHazeFilter.h */,
6D13DB7C151A697C000B23BA /* GPUImageHazeFilter.m */,
BCB5E7C014E4B6D400701302 /* GPUImageSepiaFilter.h */,
BCB5E7C114E4B6D400701302 /* GPUImageSepiaFilter.m */,
BC982B4F14F07F790001FF6F /* GPUImageColorInvertFilter.h */,
Expand Down Expand Up @@ -564,6 +570,7 @@
6EE27493150E8FC60040DDB6 /* GPUImageGrayscaleFilter.h in Headers */,
BCC94CFA15101EB3002F9BC5 /* GPUImageTransformFilter.h in Headers */,
BC54D563151904FF003F4A41 /* GPUImageChromaKeyBlendFilter.h in Headers */,
6D13DB7D151A697C000B23BA /* GPUImageHazeFilter.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -714,6 +721,7 @@
6EE27494150E8FC60040DDB6 /* GPUImageGrayscaleFilter.m in Sources */,
BCC94CFB15101EB3002F9BC5 /* GPUImageTransformFilter.m in Sources */,
BC54D564151904FF003F4A41 /* GPUImageChromaKeyBlendFilter.m in Sources */,
6D13DB7E151A697C000B23BA /* GPUImageHazeFilter.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
27 changes: 27 additions & 0 deletions framework/GPUImageHazeFilter.h
@@ -0,0 +1,27 @@
#import "GPUImageFilter.h"

/*
* The haze filter can be used to remove or haze (similar to a UV filter)
*
* @author Alaric Cole
* @creationDate 03/10/12
*
*/

@interface GPUImageHazeFilter : GPUImageFilter
{
GLint distanceUniform;
GLint slopeUniform;
}

/*
* Strength of the color applied. Default 0. Values between -.3 and .3 are best
*/
@property(readwrite, nonatomic) CGFloat distance;

/*
* Amount of color change. Default 0. Values between -.3 and .3 are best
*/
@property(readwrite, nonatomic) CGFloat slope;

@end
78 changes: 78 additions & 0 deletions framework/GPUImageHazeFilter.m
@@ -0,0 +1,78 @@
#import "GPUImageHazeFilter.h"

NSString *const kGPUImageHazeFragmentShaderString = SHADER_STRING
(
varying highp vec2 textureCoordinate;

uniform sampler2D inputImageTexture;

uniform lowp float distance;
uniform highp float slope;

void main()
{
//todo reconsider precision modifiers
highp vec4 color = vec4(1.0);//todo reimplement as a parameter

highp float d = textureCoordinate.y * slope + distance;

highp vec4 c = texture2D(inputImageTexture, textureCoordinate) ; // consider using unpremultiply


c = (c - d * color) / (1.0 -d);

gl_FragColor = c; //consider using premultiply(c);


}
);





@implementation GPUImageHazeFilter

@synthesize distance = _distance;
@synthesize slope = _slope;
#pragma mark -
#pragma mark Initialization and teardown

- (id)init;
{
if (!(self = [super initWithFragmentShaderFromString:kGPUImageHazeFragmentShaderString]))
{
return nil;
}

distanceUniform = [filterProgram uniformIndex:@"distance"];
slopeUniform = [filterProgram uniformIndex:@"slope"];

self.distance = 0.2;
self.slope = 0.0;
return self;
}

#pragma mark -
#pragma mark Accessors

- (void)setDistance:(CGFloat)newValue;
{
_distance = newValue;

[GPUImageOpenGLESContext useImageProcessingContext];
[filterProgram use];
glUniform1f(distanceUniform, _distance);
}

- (void)setSlope:(CGFloat)newValue;
{
_slope = newValue;

[GPUImageOpenGLESContext useImageProcessingContext];
[filterProgram use];
glUniform1f(slopeUniform, _slope);
}

@end

1 change: 1 addition & 0 deletions framework/Source/GPUImage.h
Expand Up @@ -49,3 +49,4 @@
#import "GPUImageGrayscaleFilter.h"
#import "GPUImageTransformFilter.h"
#import "GPUImageChromaKeyBlendFilter.h"
#import "GPUImageHazeFilter.h"

0 comments on commit 15879db

Please sign in to comment.