FROM : glenn andreas
DATE : Sun Mar 30 19:14:05 2008
On Mar 30, 2008, at 12:02 PM, Jens Alfke wrote:
>
> On 30 Mar '08, at 8:34 AM, Trygve Inda wrote:
>
>> How did you work around this?
>>
>> Basically I am opening a bitmap drawing an NSImage into it, then
>> pixel-level
>> tweaking the bitmap, and saving it to disk as a jpg.
>
> You might want to drop down a level and use CGImage for your bitmap.
> CG is stateless (the graphics context is passed in to every drawing
> call) and doesn't do the types of offscreen caching that NSImage
> does, so it's more likely to be thread-safe.
>
Or drop down just a step to just use NSBitmapImageRep instead of
NSImage which avoids all the caching issues (since you never make an
NSImage). It is very well suited for "pixel level work that is saved
in a file" (since you'll need it to do NSBitmapImageRep's
representationUsingType: properties: to get the data for a JPG or PNG
file anyway).
The only slightly tricky part is that if you want to draw in it (using
the standard drawing routines, as opposed to custom pixel access
stuff), you'll need to make a context using NSGraphicContext's
graphicsContextWithBitmapImageRep and then set that as the current
context.
Graphics contexts are thread safe (there is one for each thread) so
there's no problem with threading. I've used this approach without a
problem (and my rendering stuff is highly threaded - not just multiple
threads rendering different things into different files, but each
renderer can be multi-threaded as well)
Glenn Andreas <email_removed>
<http://www.gandreas.com/> wicked fun!
quadrium2 | build, mutate, evolve, animate | images, textures,
fractals, art
DATE : Sun Mar 30 19:14:05 2008
On Mar 30, 2008, at 12:02 PM, Jens Alfke wrote:
>
> On 30 Mar '08, at 8:34 AM, Trygve Inda wrote:
>
>> How did you work around this?
>>
>> Basically I am opening a bitmap drawing an NSImage into it, then
>> pixel-level
>> tweaking the bitmap, and saving it to disk as a jpg.
>
> You might want to drop down a level and use CGImage for your bitmap.
> CG is stateless (the graphics context is passed in to every drawing
> call) and doesn't do the types of offscreen caching that NSImage
> does, so it's more likely to be thread-safe.
>
Or drop down just a step to just use NSBitmapImageRep instead of
NSImage which avoids all the caching issues (since you never make an
NSImage). It is very well suited for "pixel level work that is saved
in a file" (since you'll need it to do NSBitmapImageRep's
representationUsingType: properties: to get the data for a JPG or PNG
file anyway).
The only slightly tricky part is that if you want to draw in it (using
the standard drawing routines, as opposed to custom pixel access
stuff), you'll need to make a context using NSGraphicContext's
graphicsContextWithBitmapImageRep and then set that as the current
context.
Graphics contexts are thread safe (there is one for each thread) so
there's no problem with threading. I've used this approach without a
problem (and my rendering stuff is highly threaded - not just multiple
threads rendering different things into different files, but each
renderer can be multi-threaded as well)
Glenn Andreas <email_removed>
<http://www.gandreas.com/> wicked fun!
quadrium2 | build, mutate, evolve, animate | images, textures,
fractals, art
| Related mails | Author | Date |
|---|---|---|
| Trygve Inda | Mar 29, 14:44 | |
| Jens Alfke | Mar 29, 18:05 | |
| Adam R. Maxwell | Mar 29, 18:54 | |
| Trygve Inda | Mar 29, 20:20 | |
| Adam R. Maxwell | Mar 29, 20:48 | |
| Thomas Engelmeier | Mar 30, 15:10 | |
| Adam R. Maxwell | Mar 30, 17:01 | |
| Trygve Inda | Mar 30, 17:34 | |
| Jens Alfke | Mar 30, 19:02 | |
| glenn andreas | Mar 30, 19:14 | |
| Trygve Inda | Mar 30, 22:21 | |
| glenn andreas | Mar 30, 22:35 | |
| Thomas Engelmeier | Mar 31, 12:30 |






Cocoa mail archive

