Reverse order of bit in repeating seqence of byte string

Steve Holden steve at holdenweb.com
Fri Jan 2 19:50:50 CET 2009


imageguy wrote:
> I am looking for the most efficient method of replacing a repeating
> sequence in a byte string returned from a imaging .dll, connected via
> 
> I receive the byte string with the following sequence 'bgrbgrbgrbgr'
> and I would like to convert this to 'rbgrbgrbgrbg'
> FWIW, the string is created using ctypes.create_string_buffer function
> 
> The following code works but feels a bit clunk and is rather slow too.
> 
> blist = list(buffer)
> for start in xrange(0,len(blist), 3):
>    try:
>         blue = blist[start]
>         red = blist[start+2]
>         blist[start] = red
>         blist[start+2] = blue
>    except IndexError:
>        pass
> 
> new_buffer = ''.join(blist)
> 
> new_buffer is then passed to a wx program to create and image.
> 
> Any thoughts comments would be appreciated.
> 
> geoff.
> 
> PS:  I started this post earlier, but I think I hit the send button
> too soon.  My apologies to the group for sloppy typing.
> 
May not be any quicker, but it works:

blues = buffer[0::3]
greens = buffer[1::3]
reds = buffer[2::3]

result = "".join("".join(x) for x in zip(reds, blues, greens))

regards
 Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC              http://www.holdenweb.com/




More information about the Python-list mailing list