1 2from PyObjCTools.TestSupport import * 3from Quartz.CoreGraphics import * 4import sys 5import os 6 7import sys 8 9try: 10 long 11except NameError: 12 long = int 13 14if sys.version_info[0] != 2: 15 def buffer(value): 16 if isinstance(value, bytes): 17 return value 18 return value.encode('latin1') 19 20 21class TestCGImage (TestCase): 22 def testConstants(self): 23 self.assertEqual(kCGImageAlphaNone, 0) 24 self.assertEqual(kCGImageAlphaPremultipliedLast, 1) 25 self.assertEqual(kCGImageAlphaPremultipliedFirst, 2) 26 self.assertEqual(kCGImageAlphaLast, 3) 27 self.assertEqual(kCGImageAlphaFirst, 4) 28 self.assertEqual(kCGImageAlphaNoneSkipLast, 5) 29 self.assertEqual(kCGImageAlphaNoneSkipFirst, 6) 30 self.assertEqual(kCGImageAlphaOnly, 7) 31 32 self.assertEqual(kCGBitmapAlphaInfoMask, 0x1F) 33 self.assertEqual(kCGBitmapFloatComponents, (1 << 8)) 34 self.assertEqual(kCGBitmapByteOrderMask, 0x7000) 35 self.assertEqual(kCGBitmapByteOrderDefault, (0 << 12)) 36 self.assertEqual(kCGBitmapByteOrder16Little, (1 << 12)) 37 self.assertEqual(kCGBitmapByteOrder32Little, (2 << 12)) 38 self.assertEqual(kCGBitmapByteOrder16Big, (3 << 12)) 39 self.assertEqual(kCGBitmapByteOrder32Big, (4 << 12)) 40 41 if sys.byteorder == 'big': 42 self.assertEqual(kCGBitmapByteOrder16Host, kCGBitmapByteOrder16Big) 43 self.assertEqual(kCGBitmapByteOrder32Host, kCGBitmapByteOrder32Big) 44 else: 45 self.assertEqual(kCGBitmapByteOrder16Host, kCGBitmapByteOrder16Little) 46 self.assertEqual(kCGBitmapByteOrder32Host, kCGBitmapByteOrder32Little) 47 48 def testFunctions(self): 49 self.assertIsInstance(CGImageGetTypeID(), (int, long)) 50 51 provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 100 * 80)) 52 self.assertArgHasType(CGImageCreate, 9, objc._C_BOOL) 53 self.assertResultIsCFRetained(CGImageCreate) 54 image = CGImageCreate(100, 80, 8, 32, 400, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast, 55 provider, None, False, kCGRenderingIntentDefault) 56 self.assertIsInstance(image, CGImageRef) 57 58 image2 = CGImageCreate(100, 80, 8, 32, 400, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaNoneSkipLast, 59 provider, [0, 1, 0, 1, 0, 1], False, kCGRenderingIntentDefault) 60 self.assertIsInstance(image2, CGImageRef) 61 62 provider = CGDataProviderCreateWithCFData(buffer("1" * 4 * 20 * 10)) 63 self.assertArgHasType(CGImageMaskCreate, 7, objc._C_BOOL) 64 self.assertResultIsCFRetained(CGImageMaskCreate) 65 mask = CGImageMaskCreate(20, 10, 8, 32, 80, provider, None, True) 66 self.assertIsInstance(mask, CGImageRef) 67 68 self.assertResultIsCFRetained(CGImageCreateCopy) 69 v = CGImageCreateCopy(image) 70 self.assertIsInstance(v, CGImageRef) 71 72 fn = '/System/Library/CoreServices/DefaultDesktop.jpg' 73 if not os.path.exists(fn): 74 fn = '/System/Library/CoreServices/DefaultDesktopServer.jpg' 75 with open(fn, 'rb') as fp: 76 data = fp.read() 77 provider = CGDataProviderCreateWithCFData(buffer(data)) 78 self.assertResultIsCFRetained(CGImageCreateWithJPEGDataProvider) 79 self.assertArgHasType(CGImageCreateWithJPEGDataProvider, 2, objc._C_BOOL) 80 v = CGImageCreateWithJPEGDataProvider(provider, None, True, kCGRenderingIntentDefault) 81 self.assertIsInstance(v, CGImageRef) 82 83 fname = '/System/Library//CoreServices/Installer.app/Contents/PlugIns/Summary.bundle/Contents/Resources/Success.png' 84 if not os.path.exists(fname): 85 fname = '/System/Library//Frameworks/Automator.framework/Versions/A/Resources/GearActionDisabled.png' 86 if not os.path.exists(fname): 87 self.fail("test image doesn't exist") 88 with open(fname, 'rb') as fp: 89 data = fp.read() 90 provider = CGDataProviderCreateWithCFData(buffer(data)) 91 self.assertResultIsCFRetained(CGImageCreateWithPNGDataProvider) 92 self.assertArgHasType(CGImageCreateWithPNGDataProvider, 2, objc._C_BOOL) 93 v = CGImageCreateWithPNGDataProvider(provider, None, True, kCGRenderingIntentDefault) 94 self.assertIsInstance(v, CGImageRef) 95 96 self.assertResultIsCFRetained(CGImageCreateWithImageInRect) 97 v = CGImageCreateWithImageInRect(image, ((10, 10), (30, 40))) 98 self.assertIsInstance(v, CGImageRef) 99 100 self.assertResultIsCFRetained(CGImageCreateWithMask) 101 v = CGImageCreateWithMask(image, mask) 102 self.assertIsInstance(v, CGImageRef) 103 104 105 self.assertResultIsCFRetained(CGImageCreateWithMaskingColors) 106 v = CGImageCreateWithMaskingColors(image2, [0,255]*4) 107 self.assertIsInstance(v, CGImageRef) 108 109 self.assertResultIsCFRetained(CGImageCreateCopyWithColorSpace) 110 v = CGImageCreateCopyWithColorSpace(image, CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)) 111 self.assertIsInstance(v, CGImageRef) 112 113 v = CGImageRetain(image) 114 self.assertTrue(v is image) 115 CGImageRelease(image) 116 117 self.assertResultHasType(CGImageIsMask, objc._C_BOOL) 118 self.assertTrue(CGImageIsMask(image) is False) 119 self.assertTrue(CGImageIsMask(mask) is True) 120 121 v = CGImageGetWidth(image) 122 self.assertIsInstance(v, (int, long)) 123 124 v = CGImageGetHeight(image) 125 self.assertIsInstance(v, (int, long)) 126 127 v = CGImageGetBitsPerComponent(image) 128 self.assertIsInstance(v, (int, long)) 129 130 v = CGImageGetBitsPerPixel(image) 131 self.assertIsInstance(v, (int, long)) 132 133 v = CGImageGetBytesPerRow(image) 134 self.assertIsInstance(v, (int, long)) 135 136 v = CGImageGetColorSpace(image) 137 self.assertIsInstance(v, CGColorSpaceRef) 138 139 v = CGImageGetAlphaInfo(image) 140 self.assertIsInstance(v, (int, long)) 141 142 v = CGImageGetDataProvider(image) 143 self.assertIsInstance(v, CGDataProviderRef) 144 145 v = CGImageGetDecode(image) 146 self.assertTrue(v is objc.NULL) 147 148 v = CGImageGetDecode(image2) 149 self.assertIsInstance(v, objc.varlist) 150 self.assertEqual(v[0], 0.0) 151 self.assertEqual(v[1], 1.0) 152 153 self.assertResultHasType(CGImageGetShouldInterpolate, objc._C_BOOL) 154 v = CGImageGetShouldInterpolate(image) 155 self.assertTrue(v is False) 156 v = CGImageGetShouldInterpolate(mask) 157 self.assertTrue(v is True) 158 159 v = CGImageGetRenderingIntent(image) 160 self.assertIsInstance(v, (int, long)) 161 162 v = CGImageGetBitmapInfo(image) 163 self.assertIsInstance(v, (int, long)) 164 165 166if __name__ == "__main__": 167 main() 168