summaryrefslogtreecommitdiff
path: root/tests/imageutils-macosx.cc
diff options
context:
space:
mode:
authorBrad Pitcher <bradpitcher@gmail.com>2011-11-01 17:15:35 (GMT)
committerBrad Pitcher <bradpitcher@gmail.com>2011-11-01 17:15:35 (GMT)
commite2caf3726d68ff1fef63113519049abffc0563af (patch)
tree6558c6f03ccc21e7138d23861f80e8d97b09e60e /tests/imageutils-macosx.cc
parent7541854212d6c1223e015faf55a6ca0657a1c184 (diff)
parentcb56f700b1b0f4ae589da62a5fd1d4e368deb604 (diff)
merge master
Diffstat (limited to 'tests/imageutils-macosx.cc')
-rw-r--r--tests/imageutils-macosx.cc64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests/imageutils-macosx.cc b/tests/imageutils-macosx.cc
new file mode 100644
index 0000000..404052f
--- /dev/null
+++ b/tests/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;
+}
contact: Jan Huwald // Impressum