Re: Faster alternative to NSImage draw/composite?
Re: Faster alternative to NSImage draw/composite?
- Subject: Re: Faster alternative to NSImage draw/composite?
- From: John Harper <email@hidden>
- Date: Sat, 02 Aug 2008 20:20:07 -0700
Hi,
If you have a fixed set of images you're repeatedly flipping through
you can have CoreAnimation do the animation for you, something like
this:
CAKeyframeAnimation *anim;
NSMutableArray *images;
CGImageRef im;
int i;
images = [NSMutableArray array];
for (i = 0; i < N; i++) {
im = create_image (i);
[images addObject:(id)im];
CGImageRelease (im);
}
anim = [CAKeyframeAnimation animation];
[anim setKeyPath:@"contents"];
[anim setValues:images];
[anim setCalculationMode:@"discrete"];
[anim setRepeatCount:HUGE_VAL];
[anim setDuration:1.0];
[layer addAnimation:anim];
since this runs completely in the background render thread it has a
better chance of not dropping frames and should use less CPU than
doing the same thing from a timer. You'll need to change the duration
value to match your number of images and desired frame rate,
John
On Aug 2, 2008, at 3:13 PM, Joseph Heck wrote:
I've been doing exactly this recently, and have had excellent
success with using CALayers (Core Animation). An NSTimer with a fast
repeat rate is triggering a method that assigns in one of an array
of CGImageRef's to the layer's contents property has made for a
really decent "flipbook" style of animation. I've been able to get
60 frames per second without issue.
I believe you can load up the CGImageRef's from NSImage through
CGBitmapContext and CGBitmapContextCreateImage. I've been working
with a *cough* different framework to get the images and display
them - one that's significantly less powerful than a standard Mac
desktop - but the throughput has been effectively the same.
-joe
On Aug 2, 2008, at 3:01 PM, Charles Steinman wrote:
--- On Sat, 8/2/08, Matt R <email@hidden> wrote:
I have read through Apple's drawing optimization guide
and have been
searching for a way of speeding these operations up, they
are unacceptably
slow. I have several 72dpi PNG image files (about 1024x768
each) which I
need to draw repeatedly into a standard NSView subclass
over time. I would
like to avoid using OpenGL directly if possible, it seems
like there should
be a faster way of drawing these other than NSImage's
draw or composite
methods.
You might try a CGLayer. It's designed for fast repeated drawing.
Cheers,
Chuck
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden