【问题标题】:Image pixel colors list, convert from RGBA to BGRA?图像像素颜色列表,从 RGBA 转换为 BGRA?
【发布时间】:2012-07-08 01:48:54
【问题描述】:

我有一个浮点数列表,它是图像像素数据。每 4 个浮点数构成一个 RGBA 像素。将该列表转换为 BGRA 格式(顺序)的最有效方法是什么?

我有什么:

[R, G, B, A, R, G, B, A]

我需要什么:

[B, G, R, A, B, G, R, A]

【问题讨论】:

    标签: python list blender


    【解决方案1】:

    使用itertools 的石斑鱼配方

    >>> from itertools import chain, izip_longest
    >>> def grouper(n, iterable, fillvalue=None):
            "Collect data into fixed-length chunks or blocks"
            # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
            args = [iter(iterable)] * n
            return izip_longest(fillvalue=fillvalue, *args)
    
    >>> pixels = [70, 140, 210, 0.5, 60, 100, 200, 0.7]
    >>> list(chain.from_iterable((b,g,r,a) for r,g,b,a in grouper(4, pixels)))
    [210, 140, 70, 0.5, 200, 100, 60, 0.7]
    

    【讨论】:

      【解决方案2】:
      >>> v = [1,2,3,4,5,6,7,8]
      >>> [v[a if a & 1 else a ^ 2] for a in range(len(v))]
      [3, 2, 1, 4, 7, 6, 5, 8]
      

      【讨论】:

        【解决方案3】:
        from itertools import chain,izip
        L = [1,2,3,4,1,2,3,4]
        print list(chain(*((C,B,A,D) for A,B,C,D in izip(*[iter(L)]*4))))
        

        【讨论】:

        • 其中的元素没有链接在一起,它们保留在 4 的元组中。PEP-8 也不鼓励使用 l 作为变量名,因为它可能与数字 1 混淆。使用L 或更好的名称。
        【解决方案4】:

        不是很Pythonic,但可能很高效

        final = []
        for i in range(len(data)/4):
            final.extend(data[4*i:4*i+3][::-1])
            final.append(data[4*i+3])
        

        编辑:如果您可以就地修改列表,那将是完美的恕我直言:

        for i in range(0, len(data), 4):
            data[i:i+3] = data[i:i+3][::-1]
        

        【讨论】:

        • 计时后,这比我使用 80 个元素列表的解决方案效率低,尽管它在小列表上更有效。即使这样看起来也很恶心!
        • @jamylak 谢谢,很高兴知道。既然我现在不能测试,那么更现实的约 500k 的情况呢?
        • 在 500k 上重复 100 次,我的运行在 3.24s,这运行在 8.52s。使用xrange 而不是range 将其降低到8.19s 并附加而不是使用带有反向切片的extend 需要7.38s
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 2021-02-14
        • 2011-06-23
        相关资源
        最近更新 更多