On 04/29/2011 10:54 AM, Chris Lervag wrote:
> Hi,
>
> Im working on a library to decode medical image files, and some of these
> files are encoded as 'PALETTE COLOR', which means you have a lookup
> table for red, green and blue pixel values. The final RGB pixel array is
> constructed by hitting the lookup table with the original pixel values.
> In my implementation I am using an iterator, and it is kinda slow. I
> cant spot an obvious way to improve on it though, so I thought I'd put
> the question out here and see if any of you more experienced Rubyists
> can suggest a more efficient way of doing this.
>
> Thanks,
> Chris
>
> Example code:
> # Set up example arrays to test the algorithm:
> lookup_values = Array.new
> lookup_values<<  Array.new(256, 0)
> lookup_values<<  Array.new(256, 1)
> lookup_values<<  Array.new(256, 2)
> pixels = Array.new(258000, rand(256))
> rgb = Array.new(pixels.length*3)
>
> # The PALETTE transformation algorithm:
> pixels.each_index do |i|
>    rgb[i*3] = lookup_values[0][pixels[i]]
>    rgb[(i*3)+1] = lookup_values[1][pixels[i]]
>    rgb[(i*3)+2] = lookup_values[2][pixels[i]]
> end
>
You might try narray: http://narray.rubyforge.org/. It's available as a gem.

ralf