- (void) saveImage:(CGContextRef) bitmap path:(NSString *)strpath type:(int)formattype dpi:(int)ndpi
{
CGImageRef imageRef = CGBitmapContextCreateImage(bitmap);
if (imageRef == NULL) {
CGImageRelease(imageRef);
//CGContextRelease(bitmap);
return ;
}
NSString *finalPath = [NSString stringWithString:strpath];
CFURLRef url = CFURLCreateWithFileSystemPath (
kCFAllocatorDefault,
(CFStringRef)finalPath,
kCFURLPOSIXPathStyle,
false);
CGImageDestinationRef dest = NULL;
if (formattype == 0) {
dest = CGImageDestinationCreateWithURL(url, CFSTR("public.jpeg"), 1, NULL);
assert(dest);
CFMutableDictionaryRef mSaveMetaAndOpts = CFDictionaryCreateMutable(nil, 0,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImageDestinationLossyCompressionQuality,
[NSNumber numberWithFloat:0.8]);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyDPIHeight,
[NSNumber numberWithInteger:ndpi]);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyDPIWidth,
[NSNumber numberWithInteger:ndpi]);
CGImageDestinationAddImage(dest, imageRef, (CFDictionaryRef)mSaveMetaAndOpts);
CFRelease(mSaveMetaAndOpts);
//CGImageDestinationAddImage(dest, imageRef, NULL);
assert(dest);
if (dest == NULL) {
NSLog(@"CGImageDestinationCreateWithURL failed");
}
//NSLog(@"%@", dest);
assert(CGImageDestinationFinalize(dest));
//这三句话用来释放对象
CFRelease(dest);
//CGImageRelease(imageRef);
//CFRetain(url);
CFRelease(url);
}
else if (formattype == 1)
{
dest = CGImageDestinationCreateWithURL(url, CFSTR("public.tiff"), 1, NULL);
assert(dest);
CFMutableDictionaryRef mSaveMetaAndOpts = CFDictionaryCreateMutable(nil, 0,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyDPIHeight,
[NSNumber numberWithInteger:ndpi]);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyDPIWidth,
[NSNumber numberWithInteger:ndpi]);
CGImageDestinationAddImage(dest, imageRef, (CFDictionaryRef)mSaveMetaAndOpts);
assert(dest);
if (dest == NULL) {
NSLog(@"CGImageDestinationCreateWithURL failed");
}
//NSLog(@"%@", dest);
assert(CGImageDestinationFinalize(dest));
//这三句话用来释放对象
CFRelease(dest);
//CGImageRelease(imageRef);
//CFRetain(url);
CFRelease(url);
}
else {
dest = CGImageDestinationCreateWithURL(url, CFSTR("public.png"), 1, NULL);
assert(dest);
CFMutableDictionaryRef mSaveMetaAndOpts = CFDictionaryCreateMutable(nil, 0,
&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyDPIHeight,
[NSNumber numberWithInteger:ndpi]);
CFDictionarySetValue(mSaveMetaAndOpts, kCGImagePropertyDPIWidth,
[NSNumber numberWithInteger:ndpi]);
CGImageDestinationAddImage(dest, imageRef, (CFDictionaryRef)mSaveMetaAndOpts);
CGImageDestinationAddImage(dest, imageRef, NULL);
assert(dest);
if (dest == NULL) {
NSLog(@"CGImageDestinationCreateWithURL failed");
}
//NSLog(@"%@", dest);
assert(CGImageDestinationFinalize(dest));
//这三句话用来释放对象
CFRelease(dest);
//CGImageRelease(imageRef);
//CFRetain(url);
CFRelease(url);
}
CGImageRelease(imageRef);
CGContextFlush(bitmap);
}