[Pythonmac-SIG] CoreGraphics, 10.5

Erik van Blokland erik at letterror.com
Mon Feb 18 18:33:36 CET 2008

On 18 feb 2008, at 09:30, Jack Jansen wrote:

>> 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.

The mask.tif file checks for 8 bit grayscale in photoshop.

When I load the image first, this works:
	bitsPerPixel = imgMask.getBitsPerPixel()
	bytesPerRow = imgMask.getBytesPerRow()	
	assert bitsPerComponent == bitsPerPixel

	 cs = imgMask.getColorSpace()
	print "img getNumberOfComponents", cs.getNumberOfComponents()
 >> img getNumberOfComponents 1

When I build the mask object, this works as well:
	maskObject = CGImageMaskCreate(width, height,
		bitsPerComponent, bitsPerPixel,
		bytesPerRow, maskProvider,
		decode, shouldInterpolate)

	bitsPerComponent = maskObject.getBitsPerComponent()
	bitsPerPixel = maskObject.getBitsPerPixel()
	assert bitsPerComponent == bitsPerPixel

The mask object returns None for getColorSpace(). So, the image checks  
for 1 component and 8 bits, but I don't know whether the mask itself  

I've posted the updated test script here:

Thanks for looking though! :)


>> 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

More information about the Pythonmac-SIG mailing list