diff options
author | don bright <hugh.m.bright@gmail.com> | 2013-01-24 03:02:31 (GMT) |
---|---|---|
committer | don bright <hugh.m.bright@gmail.com> | 2013-01-24 03:02:31 (GMT) |
commit | 1e7636e364535c78e4eebd36666bac5d352c3608 (patch) | |
tree | 5479c9229973795a771f912f3c3414f2075f2875 /src/imageutils-macosx.cc | |
parent | 1bec7aad09631d3f86874ead2c26335bc897fde5 (diff) |
add files removed from test path
Diffstat (limited to 'src/imageutils-macosx.cc')
-rw-r--r-- | src/imageutils-macosx.cc | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/imageutils-macosx.cc b/src/imageutils-macosx.cc new file mode 100644 index 0000000..404052f --- /dev/null +++ b/src/imageutils-macosx.cc @@ -0,0 +1,64 @@ +#include <ApplicationServices/ApplicationServices.h> +#include <iostream> + +bool write_png(const char *filename, unsigned char *pixels, int width, int height) +{ + size_t rowBytes = width * 4; +// CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Big; // BGRA + int bitsPerComponent = 8; + CGContextRef contextRef = CGBitmapContextCreate(pixels, width, height, + bitsPerComponent, rowBytes, + colorSpace, bitmapInfo); + if (!contextRef) { + std::cerr << "Unable to create CGContextRef."; + return false; + } + + CGImageRef imageRef = CGBitmapContextCreateImage(contextRef); + if (!imageRef) { + std::cerr << "Unable to create CGImageRef."; + return false; + } + + CFStringRef fname = CFStringCreateWithCString(kCFAllocatorDefault, filename, kCFStringEncodingUTF8); + CFURLRef fileURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, + fname, kCFURLPOSIXPathStyle, false); + if (!fileURL) { + std::cerr << "Unable to create file URL ref."; + return false; + } + + CGDataConsumerRef dataconsumer = CGDataConsumerCreateWithURL(fileURL); + CFIndex fileImageIndex = 1; + CFMutableDictionaryRef fileDict = NULL; + CFStringRef fileUTType = kUTTypePNG; + // Create an image destination opaque reference for authoring an image file + CGImageDestinationRef imageDest = CGImageDestinationCreateWithDataConsumer(dataconsumer, + fileUTType, + fileImageIndex, + fileDict); + if (!imageDest) { + std::cerr << "Unable to create CGImageDestinationRef."; + return false; + } + + CFIndex capacity = 1; + CFMutableDictionaryRef imageProps = + CFDictionaryCreateMutable(kCFAllocatorDefault, + capacity, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + CGImageDestinationAddImage(imageDest, imageRef, imageProps); + CGImageDestinationFinalize(imageDest); + + CFRelease(imageDest); + CFRelease(dataconsumer); + CFRelease(fileURL); + CFRelease(fname); + CFRelease(imageProps); + CGColorSpaceRelease(colorSpace); + CGImageRelease(imageRef); + return true; +} |