将int数组复制到一个较大的int数组中,表示给定中心点的图像

时间:2016-04-05 05:09:14

标签: java arrays

我有一个int[]代表一个小位图,我希望将其复制到代表更大位图的另一个int[]中。到目前为止,我的代码看起来像这样:

private int[] copyToOffsetCentered(int[] src, 
        Rectangle srcDim, int[] dest, Rectangle destDim, int dx, int dy)
{
    int startx = dx - srcDim.width / 2;
    int endx = startx + srcDim.width;
    int starty = dy - srcDim.height / 2;
    int endy = starty + srcDim.height;

    for (int x = Math.max(startx, 0); x < Math.min(endx, destDim.width); x++)
    {
        for (int y = Math.max(starty, 0); y < Math.min(endy, destDim.height); y++)
        {
            dest[y*destDim.width + x] = src[???];
        }
    }

    return dest;
}

如果偏移量足够接近图像边缘,则可以在复制到目标阵列时剪切源图像阵列。例如,如果我传入2x2源图像

src=[1,2,3,4]

和4x4 dest图片

dest=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

使用dx=0dy=1,我希望返回数组为

dest=[2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0]

这是由于&#34; edge&#34;根据目标中心点剪切的源。

我知道解决方案很可能非常简单,但是我很难将数据包裹在数学应该是什么样子来找出我应该用于循环内的源数组的正确索引。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

dxdy是中心src图像的目标坐标。图像的行为index/Dimension.width,图像的列为index%Dimension.width

当您在源图像中迭代起始坐标时,将会是。

int xSrc = x - start_x;
int ySrc = y - start_y;
int srcIndex = ySrc*srcDim.getWidth() + xSrc;