[Cocoa]_[初级]_[在Cocoa中使用图形上下文设备剪切图片]

来源:互联网 发布:php建站模板 编辑:程序博客网 时间:2024/05/17 20:02

如下是函数借口

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];  //得到剪切的图片





0 0