Skip navigation.
 
mlRe: drawing an array of pixels to the screen
FROM : Jason Horn
DATE : Mon Nov 12 21:58:51 2007

Dave,

Thanks for your input.  Wouldn't something like  array[x + y *width] 
be slower than array2d[x][y] when you are iterating over a large 
image?  Does the extra multiplication operation slow you down?

- Jason




On Nov 12, 2007, at 12:07 PM, David Spooner wrote:

> 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_removed>)
>>>>>
>>>>> 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/<email_removed>
>>>>>
>>>>> This email sent to <email_removed>

>>>>

>>>
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (<email_removed>)
>>>
>>> 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/<email_removed>
>>>
>>> This email sent to <email_removed>

>>
>>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (<email_removed>)
>>
>> 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/<email_removed>
>>
>> This email sent to <email_removed>
>>

>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> 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/<email_removed>
>
> This email sent to <email_removed>

Related mailsAuthorDate
mldrawing an array of pixels to the screen Jason Horn Nov 10, 04:27
mlRe: drawing an array of pixels to the screen Alex Kac Nov 10, 05:37
mlRe: drawing an array of pixels to the screen John Stiles Nov 10, 05:56
mlRe: drawing an array of pixels to the screen Bill Bumgarner Nov 10, 06:05
mlRe: drawing an array of pixels to the screen Jason Horn Nov 12, 13:50
mlRe: drawing an array of pixels to the screen Jean-Daniel Dupas Nov 12, 14:08
mlRe: drawing an array of pixels to the screen Erik Buck Nov 12, 15:38
mlRe: drawing an array of pixels to the screen Jean-Daniel Dupas Nov 12, 16:19
mlRe: drawing an array of pixels to the screen David Spooner Nov 12, 18:07
mlRe: drawing an array of pixels to the screen David Spooner Nov 12, 18:22
mlRe: drawing an array of pixels to the screen Jason Horn Nov 12, 21:58
mlRe: drawing an array of pixels to the screen John Stiles Nov 12, 22:11
mlRe: drawing an array of pixels to the screen David Spooner Nov 12, 23:17
mlRe: drawing an array of pixels to the screen John Stiles Nov 12, 23:39