void wxBitmapDataObject::SetBitmap( const wxBitmap& rBitmap ) { Clear(); wxBitmapDataObjectBase::SetBitmap( rBitmap ); if (m_bitmap.Ok()) { #if wxMAC_USE_CORE_GRAPHICS CGImageRef cgImageRef = (CGImageRef) m_bitmap.CGImageCreate(); #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4 if ( UMAGetSystemVersion() >= 0x1040 ) { CFMutableDataRef data = CFDataCreateMutable(kCFAllocatorDefault, 0); CGImageDestinationRef destination = CGImageDestinationCreateWithData( data , kUTTypeTIFF , 1 , NULL ); if ( destination ) { CGImageDestinationAddImage( destination, cgImageRef, NULL ); CGImageDestinationFinalize( destination ); CFRelease( destination ); } m_pictHandle = NewHandle(CFDataGetLength(data)); if ( m_pictHandle ) { memcpy( *(Handle)m_pictHandle, (const char *)CFDataGetBytePtr(data), CFDataGetLength(data) ); } CFRelease( data ); } else #endif #ifndef __LP64__ { // export as TIFF GraphicsExportComponent exporter = 0; OSStatus err = OpenADefaultComponent(GraphicsExporterComponentType, kQTFileTypeTIFF, &exporter); if (noErr == err) { m_pictHandle = NewHandle(0); if ( m_pictHandle ) { err = GraphicsExportSetInputCGImage( exporter, cgImageRef); err = GraphicsExportSetOutputHandle(exporter, (Handle)m_pictHandle); err = GraphicsExportDoExport(exporter, NULL); } CloseComponent( exporter ); } } #endif CGImageRelease(cgImageRef); #else m_pictHandle = m_bitmap.GetBitmapData()->GetPictHandle(); m_pictCreated = false; #endif } }
static void exportCGImageToFileWithQT(CGImageRef image, CFURLRef url, CFStringRef outputFormat, float dpi) { Handle dataRef = NULL; OSType dataRefType; GraphicsExportComponent graphicsExporter; unsigned long sizeWritten; ComponentResult result; OSType imageExportType; if(CFStringCompare(outputFormat, kUTTypeTIFF, kCFCompareCaseInsensitive) == kCFCompareEqualTo){ imageExportType = kQTFileTypeTIFF; }else if(CFStringCompare(outputFormat, kUTTypePNG, kCFCompareCaseInsensitive) == kCFCompareEqualTo){ imageExportType = kQTFileTypePNG; }else if(CFStringCompare(outputFormat, kUTTypeJPEG, kCFCompareCaseInsensitive) == kCFCompareEqualTo){ imageExportType = kQTFileTypeJPEG; }else{ fprintf(stderr, "Requested image export format %@s unsupported\n", outputFormat); return; } result = QTNewDataReferenceFromCFURL(url, 0, &dataRef, &dataRefType); if(!result){ result = OpenADefaultComponent(GraphicsExporterComponentType, imageExportType, &graphicsExporter); if(!result){ result = GraphicsExportSetInputCGImage(graphicsExporter, image); if(!result) result = GraphicsExportSetResolution(graphicsExporter, FloatToFixed(dpi), FloatToFixed(dpi)); if(!result) result = GraphicsExportSetOutputDataReference( graphicsExporter, dataRef, dataRefType); if(!result) result = GraphicsExportDoExport( graphicsExporter, &sizeWritten); CloseComponent(graphicsExporter); } } if(dataRef) DisposeHandle(dataRef); if(result) fprintf(stderr, "QT export got bad result = %d!\n", (int)result); return; }