Re: drawing an array of pixels to the screen
Re: drawing an array of pixels to the screen
- Subject: Re: drawing an array of pixels to the screen
- From: David Spooner <email@hidden>
- Date: Mon, 12 Nov 2007 10:07:16 -0700
On 12-Nov-07, at 6:08 AM, Jean-Daniel Dupas wrote:
You can also use coords with a raw array
array2d[x][y] is the same than array[x + y *width].
AFAK, a 1D array will be the fastest representation as it is the
native representation, and any function that take a 2D array will
probably convert it into a raw array to display it.
Agreed.
I would adopt the 1d array as the internal representation. Granted
a[x][y] is nicer than a[x+y*w], but one can easily provide an
equivalent syntax.
For those functions expecting a 2d array which you can't or don't want
to change, you can create a 2d array from a 1d array by creating a
column of row pointers...
pixel *rows = malloc(n_rows * sizeof(pixel *));
for (i = 0; i < n_rows; ++i)
rows[i] = &bitmap[i * w];
dave
Le 12 nov. 07 à 13:50, Jason Horn a écrit :
John,
Thanks for your thoughts here, but you've hit exactly on the
problem. NSBitmapImageRep takes a byte array, NOT a 2d array of
pixel values. That means after every analytical operation I
perform on the 2d pixel array, I have to then transform it back
into a byte stream (or at least a flat array) before drawing it.
This slows everything down. AFIK, NSBitmapImageRep will not take a
2d array of values. (I've tried). The crux of my question was,
once you have a 2d array (x,y) arrangement of pixels, what's the
fastest way to get it onto the screen.
- Jason
On Nov 9, 2007, at 11:56 PM, John Stiles wrote:
+NSBitmapImageRep
initWithBitmapDataPlanes:pixelsWide:pixelsHigh:bitsPerSample:samplesPerPixel:hasAlpha:isPlanar:colorSpaceName:bitmapFormat:bytesPerRow:bitsPerPixel
: is pretty efficient. You're not copying the whole byte array, it
just takes a reference to it.
However, another poster hit the nail on the head—if performance is
important to you, might as well go OpenGL. You can't get any
faster than that on OS X.
On Nov 9, 2007, at 7:27 PM, Jason Horn wrote:
I am working on a computer vision based app that detects objects
in video images. I have to implement custom algorithms to locate
and track objects, so I need to write code that has direct access
to the pixel values and keep track of the x,y coordinates of
certain objects. This is easiest to do with the image
represented as a 2D array of int values. However, it seems that
the only way to draw bitmaps to the screen is with NSImage and
NSBitmapImageRep or CIImage. Is there another way? It seems
like a waste (and a performance hit) to convert a 2D array of
pixel values into a byte stream every time you want to display
the image. Is there a way to draw the pixel values directly to
the screen (and do it quickly).
Thanks for any ideas.
_______________________________________________
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
_______________________________________________
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