I narrowed this down by removing the filters, and the leak is still
there. And what a leak! Everytime I draw the view the memory usage
increases with the size of the drawn image. Yet this exact same code
is used in the Core Image Programming Guide. So I figure it's a bug in
Core Image. But how can I avoid it?


 - (void) drawRect:(NSRect)rect
{
         CIImage *image = [CIImage imageWithData:[[self image]
TIFFRepresentation]];
       if (image !=nil) {

                 CGRect cg;
                 CIContext *context = [[NSGraphicsContext
currentContext] CIContext];
                 cg = CGRectMake(NSMinX(rect), NSMinY(rect),
NSWidth(rect), NSHeight(rect));
                 [context drawImage:image
                                         atPoint:cg.origin
                                         fromRect:cg];

         }
 }

On Mon, Mar 10, 2008 at 5:33 PM,  <[EMAIL PROTECTED]> wrote:
> Hi,
>
>  I'm applying a Core Image filter to an image in a NSImageView
>  subclass. The drawing works fine, except it leaks memory, not sure
>  why. This is my drawRect method. Anything wrong with it? Thanks.
>
>
>  - (void) drawRect:(NSRect)rect
>  {
>
>         [[self image] setFlipped:YES];
>         CIImage *image = [CIImage imageWithData:[[self image] 
> TIFFRepresentation]];
>         if (image !=nil) {
>                 CIFilter *filter = [CIFilter 
> filterWithName:@"CIGaussianBlur"];
>                 [filter setDefaults];
>                 [filter setValue: image forKey: @"inputImage"];
>                 [filter setValue: [NSNumber numberWithFloat:0.7] forKey: 
> @"inputRadius"];
>                 image = [filter valueForKey: @"outputImage"];
>
>                 filter = [CIFilter filterWithName:@"CIPerspectiveTransform"];
>                 [filter setDefaults];
>                 [filter setValue: image forKey: @"inputImage"];
>                 [filter setValue:[CIVector vectorWithX:NSMinX(rect) 
> Y:NSMinY(rect) +
>  bLeft ] forKey:@"inputBottomLeft"];
>                 [filter setValue:[CIVector vectorWithX:NSMaxX(rect) 
> Y:NSMinY(rect) +
>  bRight ] forKey:@"inputBottomRight"];
>                 [filter setValue:[CIVector vectorWithX:NSMinX(rect) 
> Y:NSMaxY(rect) +
>  tLeft ] forKey:@"inputTopLeft"];
>                 [filter setValue:[CIVector vectorWithX:NSMaxX(rect) 
> Y:NSMaxY(rect) +
>  tRight ] forKey:@"inputTopRight"];
>                 image = [filter valueForKey: @"outputImage"];
>
>                 CGRect cg;
>                 CIContext *context = [[NSGraphicsContext currentContext] 
> CIContext];
>                 cg = CGRectMake(NSMinX(rect), NSMinY(rect), NSWidth(rect), 
> NSHeight(rect));
>                 [context drawImage:image
>                                         atPoint:cg.origin
>                                         fromRect:cg];
>
>         }
>  }
>
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to