[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