1

我正在使用 setPixel 和 getPixel 函数,但它们使用的是自然矩形的矩阵。我正在尝试复制形状像圆形的像素!

更新:现在我正在使用这个,但我希望有比这个更有效的东西:

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]) ;
4

2 回答 2

2

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

否则,您可以通过更有效地进行计算来节省一些时间。首先,不要使用 pow 来解决问题。其次,预先计算循环外的半径。理论上,您的编译器会为您解决所有这些问题,但不要指望它。

第三,考虑使用Bresenham 的圆算法找到圆的每一行的起点和终点,然后将像素一次复制一行,而不是一次复制一个像素。

于 2010-10-28T18:02:21.057 回答
0

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

(x - h)^2 + (y - k)^2 = r^2
于 2010-10-28T17:52:45.523 回答