[Pythonmac-SIG] CoreGraphics, 10.5
Jack Jansen
Jack.Jansen at cwi.nl
Mon Feb 18 09:30:34 CET 2008
Are you sure your mask is actually greyscale? If I looks as if
there's a repeating pattern in your result image. Maybe you could
also use an assert to make sure bitsPerComponent() == bitsPerPixel()
and #components==1.
On 16-Feb-2008, at 13:45 , Erik van Blokland wrote:
>
> Folks,
>
> I've been wrestling with some CoreGraphics stuff, OSX 10.5.2, stock
> Python 2.5.1. I want to load a RGB image, then load a grayscale
> image, draw one while using the other as a mask. I can build all
> the required objects. I can draw with "masking-like things"
> happening to the image. But the masking appears to be according to
> a (random) piece of memory, rather than the pixels from the mask
> image.
>
> The RGB image:
> http://erik.letterror.com/cg/picture.png
>
> The grayscale mask:
> http://erik.letterror.com/cg/mask.tif
>
> The resulting image:
> http://erik.letterror.com/cg/results.png
>
> The script:
> http://erik.letterror.com/cg/cgMaskTestPost.py
>
> The script which draws this file is below. Yellow background, rgb
> image of a neon sign, mask. I get the impression I'm somehow not
> making the right kind of mask. Or perhaps the parameters I'm
> passing to it are wrong. Perhaps the mask image is wrong. I've
> tried black/white bitmaps, tiff, jpeg, png, grayscale 8 bit, 24
> bit. Different formats result in different patterns being used as a
> mask - so there is some correlation between the file and the
> result. Is this anywhere close to how it needs to be done?
>
> Any pointers are most welcome, thanks!
>
> Erik van Blokland
>
>
>
>
> #! /usr/bin/python2.5
>
> from CoreGraphics import *
> import os
>
> def test():
> testWidth = 1000
> testHeight = 500
> fileName = 'picture.png' # name of a 8 bit PNG, RGB image
> maskName = 'mask.tif' # name of an 8 bit, grayscale tiff
> # the paths
> root = os.getcwd()
> filePath = os.path.join(root,fileName)
> maskPath = os.path.join(root,maskName)
> dstPath = os.path.join(root, "results.png")
>
> # data providers for the image and the mask
> img = CGImageImport(CGDataProviderCreateWithFilename(filePath))
> maskProvider = CGDataProviderCreateWithFilename(maskPath)
> imgMask = CGImageImport(maskProvider)
>
> # first, let's find out some things about the mask.
> width = imgMask.getWidth()
> height = imgMask.getHeight()
> bitsPerComponent = imgMask.getBitsPerComponent()
> bitsPerPixel = imgMask.getBitsPerPixel()
> bytesPerRow = imgMask.getBytesPerRow()
> shouldInterpolate = True
> decode = [0,255] # not relevant?
> # make the mask
> maskObject = CGImageMaskCreate(width, height,
> bitsPerComponent, bitsPerPixel,
> bytesPerRow, maskProvider,
> decode, shouldInterpolate)
> # now make the image with source image AND mask
> imgWithMask = CGImage_createWithMask(img, maskObject)
> # make a new image to save it all
> ctx = CGBitmapContextCreateWithColor(testWidth, testHeight,
> CGColorSpaceCreateDeviceRGB(), (0,0,0,0))
> # a background color
> ctx.setRGBFillColor(.9, .9, 0, .8)
> ctx.addRect(CGRectMake(0, 0, testWidth, testHeight))
> ctx.fillPath()
> # draw the masked image
> ctx.drawImage(CGRectMake(50, 50, width, height), imgWithMask)
> CGContext_writeToFile(ctx, dstPath, kCGImageFormatPNG)
> print "done"
>
> if __name__ == "__main__":
> test()
>
>
> _______________________________________________
> Pythonmac-SIG maillist - Pythonmac-SIG at python.org
> http://mail.python.org/mailman/listinfo/pythonmac-sig
--
Jack Jansen, <Jack.Jansen at cwi.nl>, http://www.cwi.nl/~jack
If I can't dance I don't want to be part of your revolution -- Emma
Goldman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/pythonmac-sig/attachments/20080218/3a2660d3/attachment.htm
More information about the Pythonmac-SIG
mailing list