2 * Copyright (C) 2006 Oliver Hunt <ojh16@student.canterbury.ac.nz>. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #import "WKDiscreteTransferFilter.h"
28 static CIKernel *discreteTransferFilter = nil;
30 @implementation WKDiscreteTransferFilter
33 [CIFilter registerFilterName:@"WKDiscreteTransfer"
35 classAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
36 @"WebKit Discrete Transfer", kCIAttributeFilterDisplayName,
37 [NSArray arrayWithObjects:kCICategoryStylize, kCICategoryVideo,
38 kCICategoryStillImage, kCICategoryNonSquarePixels,nil], kCIAttributeFilterCategories,
42 + (CIFilter *)filterWithName:(NSString *)name
44 return [[[self alloc] init] autorelease];
49 if (!discreteTransferFilter) {
50 NSBundle *bundle = [NSBundle bundleForClass:[self class]];
51 NSString *kernelFile = [bundle pathForResource:@"WKDiscreteTransferFilter" ofType:@"cikernel"];
52 NSString *code = [NSString stringWithContentsOfFile:kernelFile];
53 NSArray *kernels = [CIKernel kernelsWithString:code];
54 discreteTransferFilter = [[kernels objectAtIndex:0] retain];
59 - (CIImage *)outputImage
61 CISampler *inputSampler = [CISampler samplerWithImage: inputImage];
62 CISampler *tableSampler = [CISampler samplerWithImage: inputTable keysAndValues:kCISamplerFilterMode, kCISamplerFilterNearest, kCISamplerWrapMode, kCISamplerWrapClamp, nil];
63 NSArray *args = [NSArray arrayWithObjects:inputSampler, tableSampler, inputSelector,
64 [NSNumber numberWithDouble:[inputTable extent].size.width - 1.0f], @"definition", [inputSampler definition], nil];
65 return [self apply:discreteTransferFilter arguments:args options:nil];