java - BufferedImage 旋转,改变结果背景

标签 java background bufferedimage

当我使用 Graphics2D.rotate() 旋转图像时,显然它会在角落留下一些空白空间。空白的角落变得透明。

我希望我的程序旋转 BufferedImage 并用白色填充剩余的空白角。

我该怎么做?

换句话说,我想旋转图像,同时为整个图像保留白色背景。

这是我的功能:

public BufferedImage rotateImage(BufferedImage image, double degreesAngle) {    
        int w = image.getWidth();    
        int h = image.getHeight();    
        BufferedImage result = new BufferedImage(w, h, image.getType());  
        Graphics2D g2 = result.createGraphics();  
        g2.rotate(Math.toRadians(degreesAngle), w/2, h/2);
        g2.drawImage(image,null,0,0);  
        return result;   
    }    

然后我使用此图像将其绘制为透明的 JPanel,稍后我将其添加到 JLayeredPane。

但是,我的图片有透明角,我想用白色填充它们。

最佳答案

你(至少)有两个选择......

你可以...

在绘制旋转图像之前绘制 BufferedImage 的背景...

public BufferedImage rotateImage(BufferedImage image, double degreesAngle) {    
    int w = image.getWidth();    
    int h = image.getHeight();    
    BufferedImage result = new BufferedImage(w, h, image.getType());  
    Graphics2D g2 = result.createGraphics();  
    g2.setColor(Color.WHITE);
    g2.fillRect(0, 0, w, h);
    g2.rotate(Math.toRadians(degreesAngle), w/2, h/2);
    g2.drawImage(image,null,0,0);  
    return result;   
}  

你可以...

在将图像绘制到面板之前先绘制图像后面的区域...

关于java - BufferedImage 旋转,改变结果背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20256183/

相关文章:

java - 如果构造函数参数之一是 List 类型,是否可以使用 null 参数测试私有(private)构造函数?

java - 我的任务是使用 for 循环 build 一座房子。房子应该是这样的

swift - 如何使用 applicationdidBecomeActive 函数呈现 ViewController(但有一些异常(exception))?

html 可访问性 : anchor tags with background images on pseudo elements

Java 读取图像 - java.lang.OutOfMemoryError

java - 尝试使用用户输入创建矩阵时出现编译错误。 java

java - 如何将Scala应用程序转变为单实例持久HTTP服务?

html - 基于 DIV 的布局 - bg 和按钮相对于屏幕

opencv - 寻找拼图的角落

java - 第 2 部分 - 如何在缩放 JTextPane 时获得一致的呈现?