代码之家  ›  专栏  ›  技术社区  ›  Tony

如何将像素从一个位图复制到另一个圆形位图?

  •  1
  • Tony  · 技术社区  · 14 年前

    更新: 现在我用这个,但我希望有比这个更有效的方法:

    for(int i=0;i<eHeight ; i++)
            for(int j=0;j<eWidth ; j++)
                if( Math.pow((i-eHeight/2),2) +  Math.pow((j-eWidth/2),2) < Math.pow((eHeight/2),2)) 
                    mutable.setPixel((int)xpos+j, (int)ypos+i, r[i*eWidth + j]) ;
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   novalis    14 年前

    如果你的圆圈是固定的,我敢打赌有一种方法可以用面具快速完成——谷歌告诉我PorterDuffXfermode是你所需要的。

    否则,您可以通过更有效地执行计算来节省一些时间。首先,不要用战俘摆平东西。其次,在循环外预计算半径。你的编译器理论上会帮你解决所有问题,但不要指望它。

    第三,考虑使用 Bresenham's circle algorithm 查找圆的每一行的开始和结束,然后一次复制一行而不是一个像素。

        2
  •  0
  •   Cheryl Simon    14 年前

    你需要做一些数学运算来确定你要复制的像素是否应该是圆的一部分。

    (x - h)^2 + (y - k)^2 = r^2