如下是函数借口
CutImageFilter.h
#import "BaseFilter.h"
@interface CutImageFilter : NSObject
{
NSRect cutImageRect;
}
@property(readwrite,assign) NSRect cutImageRect;
-(NSImage *) doFilter:(NSImage*) image;
@end
CutImageFilter.m
#import "CutImageFilter.h"
@implementation CutImageFilter
@synthesize cutImageRect;
-(NSImage *) doFilter:(NSImage*) image
{
NSLog(@"CutImageFilter.h");
NSAutoreleasePool *pool = [NSAutoreleasePool new];
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)[*image TIFFRepresentation],NULL);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, 0, NULL);
CGFloat x =cutImageRect.origin.x;
CGFloat y =cutImageRect.origin.y;
CGFloat width = cutImageRect.size.width;
CGFloat height = cutImageRect.size.height;
CGRect myImageArea = CGRectMake(x, y, width, height);
CGImageRef mySubimage = CGImageCreateWithImageInRect (imageRef, myImageArea);
if(mySubimage != nil)
{
*image = [self imageFromCGImageRef:mySubimage];
//NSLog(@"image width:%f,height:%f",image.size.width,image.size.height);
//NSData *data = [image TIFFRepresentation];
//[data writeToFile:@"/Users/mac-d1/work/cutImage11.png" atomically:YES];
}
[pool drain];
}
- (NSImage*) imageFromCGImageRef:(CGImageRef)image
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];
NSRect imageRect = NSMakeRect(0.0, 0.0, 0.0, 0.0);
CGContextRef imageContext = nil;
NSImage* newImage = nil;
// Get the image dimensions.
imageRect.size.height = CGImageGetHeight(image);
imageRect.size.width = CGImageGetWidth(image);
// Create a new image to receive the Quartz image data.
newImage = [[NSImage alloc] initWithSize:imageRect.size];
[newImage lockFocus];
// Get the Quartz context and draw.
imageContext = (CGContextRef)[[NSGraphicsContext currentContext]graphicsPort];
CGContextDrawImage(imageContext, *(CGRect*)&imageRect, image);
[newImage unlockFocus];
[pool drain];
return newImage;
}
@end
运用:
CutImageFilter *cutFilter =[CutImageFilter new];
[cutFilter setCutImageRect:NSMakeRect(0,0,100,100)];
NSImage *sourceImage =[NSImage imageNamed:@"sourceImage.png"];
NSImage *cutImage =[cutFilter doFilter:sourceImage]; //得到剪切的图片