有什么方法可以旋转由像素值的二维数组表示的图像吗?

Is there any way to rotate an image represented by a two-dimensional array of pixel values?

我正在尝试将 Matlab 的 imrotate 函数的功能引入 Java。具体来说,由于我已经将图像的像素值存储在二维数组中,因此我想以指定的角度围绕其中心旋转该图像。我找到的大多数答案(使用 AffineTransform 和 Graphics2D 和 BufferedImage)都是面向图形的,我无法产生我需要的结果,因为我不需要在视觉上绘制它。比如下面的函数返回了一张所有像素值为0的图片(可视化部分我注释掉了)

public static BufferedImage rotateImage(BufferedImage img, double angle) {
        double rads = Math.toRadians(angle);
        double sin = Math.abs(Math.sin(rads)), cos = Math.abs(Math.cos(rads));
        int w = img.getWidth();
        int h = img.getHeight();
        int newWidth = (int) Math.floor(w * cos + h * sin);
        int newHeight = (int) Math.floor(h * cos + w * sin);

        BufferedImage rotated = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = rotated.createGraphics();
        AffineTransform at = new AffineTransform();
        at.translate((newWidth - w) / 2, (newHeight - h) / 2);

        int x = w / 2;
        int y = h / 2;

        at.rotate(rads, x, y);
        g2d.setTransform(at);
//        g2d.drawImage(img, 0, 0, this);
//        g2d.setColor(Color.RED);
//        g2d.drawRect(0, 0, newWidth - 1, newHeight - 1);
//        g2d.dispose();

        return rotated;

非常感谢任何帮助或建议。另外,如果您需要更多详细信息,请告诉我。

更新:我想我应该更好地澄清我的问题。 所以我有一个指纹图像,我需要从中提取一个子图像。之后,我必须根据提供的角度旋转子图像。我尝试过的是:首先,将图像作为 BufferedImage 加载。然后,我将子图像提取为二维整数数组。最后,我需要应用旋转。当我做一些研究时,我知道这听起来很傻,我可能是这样,但我试图用子图像的 2d 数组创建一个 BufferedImage,然后用下面给出的方法旋转。然而,我没有成功。我期待听到您对我在概念上或程序上做错了什么的评论。非常感谢。

正如评论中指出的,以下答案可能对这个问题有用:

I have a code that shears the image but i would like it to rotate on the x and y axis with forward and backward mapping. Any advice on how to do this?