0

我正在编写一个java代码,它将图像分成块并旋转到一定程度并将这些块组合成一个最终图像。然后使用相同的代码将图像分成块并反向旋转。我希望得到与原始图像相同的图像,但我得到的图像之间有黑线分隔。例如一幅图像被分成8行8列并进行旋转。我已经用谷歌搜索了它并提出了以下代码:

    public static BufferedImage Didvide( BufferedImage image , int Bz ,double       angle ){    
int rows = Bz;
int cols = Bz;
int chunks = rows * cols;
int chunkWidth = image.getWidth() / cols;
int chunkHeight = image.getHeight() / rows;
int count = 0;
BufferedImage imgs[] = new BufferedImage[chunks];

for (int x = 0; x < rows; x++) {
    for (int y = 0; y < cols; y++) {
        imgs[count] = new BufferedImage(chunkWidth, chunkHeight,
                image.getType());

        // draws image chunk
        Graphics2D gr = imgs[count++].createGraphics();
        gr.drawImage(image, 0, 0, chunkWidth, chunkHeight, chunkWidth
                * y, chunkHeight * x, chunkWidth * y + chunkWidth,
                chunkHeight * x + chunkHeight, null);
        gr.dispose();
    }
}

BufferedImage[] Rimgs = new BufferedImage[imgs.length];
for (int i = 0; i < imgs.length; i++) {
    Rimgs[i] = rotate(imgs[i], angle);
}

chunkWidth = Rimgs[0].getWidth();
chunkHeight = Rimgs[0].getHeight();

// Initializing the final image
BufferedImage finalImg = new BufferedImage(chunkWidth * cols,
        chunkHeight * rows, BufferedImage.TYPE_3BYTE_BGR);

int num = 0;
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
        finalImg.createGraphics().drawImage(Rimgs[num], chunkWidth * j,
                chunkHeight * i, null);
        num++;
    } }   return finalImg; }


         public static BufferedImage rotate(BufferedImage image, double angle) {
    double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
    int w = image.getWidth(), h = image.getHeight();
    int neww = (int) Math.floor(w * cos + h * sin), newh = (int) Math
            .floor(h * cos + w * sin);
    GraphicsConfiguration gc = getDefaultConfiguration();
    BufferedImage result = gc.createCompatibleImage(neww, newh,
            Transparency.OPAQUE);
    Graphics2D g = result.createGraphics();
    g.translate((neww - w) / 2, (newh - h) / 2);
    g.rotate(angle, w / 2, h / 2);
    g.drawRenderedImage(image, null);
    g.dispose();
    return result;
}

将 baboo 灰度 298X298 像素的图像划分为 8 列和 8 行后,我面临的问题是,生成的图像有黑线分隔列。但是,当我将图像分成 12 或 4 时,它工作正常。你能告诉我我应该考虑的地方吗?

似乎我不能发布图像。当我将图像分割并旋转为 298X298 图像的 8 行和 8 列时,我得到 296X296 像素的结果。我怎样才能解决这个问题。所以分割旋转前的大小与分割后的大小相同。

在此先感谢您的帮助。

4

0 回答 0