Interpret XMP-Metadata in ALAssetRepresentation Interpret XMP-Metadata in ALAssetRepresentation ios ios

Interpret XMP-Metadata in ALAssetRepresentation


ALAssetRepresentation* representation = [[self assetAtIndex:index] defaultRepresentation];// Create a buffer to hold the data for the asset's imageuint8_t *buffer = (Byte*)malloc(representation.size); // Copy the data from the asset into the bufferNSUInteger length = [representation getBytes:buffer fromOffset: 0.0  length:representation.size error:nil];if (length==0)    return nil;// Convert the buffer into a NSData object, and free the buffer after.NSData *adata = [[NSData alloc] initWithBytesNoCopy:buffer length:representation.size freeWhenDone:YES];// Set up a dictionary with a UTI hint. The UTI hint identifies the type// of image we are dealing with (that is, a jpeg, png, or a possible// RAW file).// Specify the source hint.NSDictionary* sourceOptionsDict = [NSDictionary dictionaryWithObjectsAndKeys:(id)[representation UTI], kCGImageSourceTypeIdentifierHint, nil];// Create a CGImageSource with the NSData. A image source can// contain x number of thumbnails and full images.CGImageSourceRef sourceRef = CGImageSourceCreateWithData((CFDataRef) adata,  (CFDictionaryRef) sourceOptionsDict);[adata release];CFDictionaryRef imagePropertiesDictionary;// Get a copy of the image properties from the CGImageSourceRef.imagePropertiesDictionary = CGImageSourceCopyPropertiesAtIndex(sourceRef,0, NULL);CFNumberRef imageWidth = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelWidth);CFNumberRef imageHeight = (CFNumberRef)CFDictionaryGetValue(imagePropertiesDictionary, kCGImagePropertyPixelHeight);int w = 0;int h = 0;CFNumberGetValue(imageWidth, kCFNumberIntType, &w);CFNumberGetValue(imageHeight, kCFNumberIntType, &h);// Clean up memoryCFRelease(imagePropertiesDictionary);