The Flying Meat Wiki : AcornPythonBrightnessCIFilter

HomePage :: Categories :: PageIndex :: RecentChanges :: Login/Register
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

CIBrightness.py
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)
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.1001 seconds