Oldest known version of this page was edited on 2008-01-21 16:22:54 by GusMueller []
Page view:
This example shows how to add a custom Image Unit, which will then show up in the Filters menu, along with widgets to configure the plugin.
For more information on writing Image Units, visit:
http://developer.apple.com/macosx/coreimage.html∞
Place it in a text file named "CIBrightness.py" and place it in your ~/Library/Application Support/Acorn/Plug-Ins/ folder, and restart Acorn
import objc
from Foundation import *
from AppKit import *
CIImage = objc.lookUpClass( 'CIImage' )
CIFilter = objc.lookUpClass( 'CIFilter' )
CIKernel = objc.lookUpClass( 'CIKernel' )
CISampler = objc.lookUpClass( 'CISampler' )
CIVector = objc.lookUpClass( 'CIVector' )
kernelCode = """
kernel vec4 brightenEffect(sampler src, float k)
{
vec4 s;
s = sample(src, samplerCoord(src));
s.rgb = s.rgb + k * s.a;
return s;
}
"""
PYBrightnessFilterAttributs = {}
PYBrightnessFilterAttributs["CIAttributeFilterCategories"] = ("CICategoryColorAdjustment",)
PYBrightnessFilterAttributs["CIAttributeFilterDisplayName"] = "Python Brighten"
PYBrightnessFilterAttributs["inputImage"] = {"CIAttributeClass":"CIImage" };
PYBrightnessFilterAttributs["brightnessBias"] = {"CIAttributeType":"CIAttributeTypeScalar",
"CIAttributeClass":"NSNumber",
"CIAttributeType":"CIAttributeTypeScalar",
"CIAttributeName": "brightnessBias",
"CIAttributeDisplayName": "Brightness Bias",
"CIAttributeSliderMin": -1,
"CIAttributeSliderMax": 1,
"CIAttributeDefault": 0,
}
class PYBrightnessFilter (CIFilter):
def init(self):
super(PYBrightnessFilter, self).init()
self.brightnessBias = 0
self.inputImage = None
return self
def filterWithName_(self, name):
filter = PYBrightnessFilter.alloc().init()
filter.inputImage = None
return filter
def setInputImage_(self, img):
self.inputImage = img
def setBrightnessBias_(self, b):
self.brightnessBias = b
def outputImage(self):
if self.inputImage is None:
return None
kernels = CIKernel.kernelsWithString_( kernelCode )
kernel = kernels.objectAtIndex_(0)
sampler = CISampler.samplerWithImage_( self.inputImage )
filter = CIFilter.alloc().init()
filterArgs = [sampler, self.brightnessBias, None]
filterOptions = {}
image = filter.apply_arguments_options_(kernel, filterArgs, None)
return image
def attributes(self):
return PYBrightnessFilterAttributs
def inputKeys(self):
return ("inputImage", "brightnessBias")
CIFilter.registerFilterName_constructor_classAttributes_("PYBrightnessFilter", PYBrightnessFilter, PYBrightnessFilterAttributs)