java - 尽可能快地清除透明的 BufferedImage

标签 java awt bufferedimage graphics2d

我有一个使用以下代码创建的透明 BufferedImage(我认为它的创建方式不相关):

            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            GraphicsDevice gs = ge.getDefaultScreenDevice();
            GraphicsConfiguration gc = gs.getDefaultConfiguration();

            Rectangle screen = transformationContext.getScreen();

            // Create an image that supports transparent pixels
            return gc.createCompatibleImage((int) screen.getWidth(), (int) screen.getHeight(),
                    Transparency.BITMASK);

如何在不重新创建图像的情况下以最快的方式清除图像(与创建状态相同的空图像)?重新创建图像会给 GC 带来负担,暂停 VM 并卡住 UI。

最佳答案

知道了 :) 使用 clearRect 而不是填充透明颜色。

            graphics = (Graphics2D) offlineBuffer.getGraphics();
            graphics.setBackground(new Color(255, 255, 255, 0));
            Rectangle screen = transformationContext.getScreen();
            graphics.clearRect(0,0, (int)screen.getWidth(), (int)screen.getHeight());

关于java - 尽可能快地清除透明的 BufferedImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367365/

相关文章:

java - 如何检查字符串是否为 float ?

java - token "void"上存在语法错误,@预期用于入口方法声明

java - 从ObjectName获取Google云存储文件

java - Swing - Awt。如何在没有前一帧中的元素的情况下渲染新帧?

java - 在用户验证中按下登录按钮后,我的代码不显示任何内容

java - 读取14位和16位图像

java - 将 TYPE_INT_RGB 转换为 TYPE_BYTE_GRAY 图像会产生错误的结果

java - 更改现有 BufferedImage 的颜色空间?

java - 使用 SQLiteOpenHelper 时出现问题,创建时返回 null,可能是线程问题

java - 如何在屏幕上移动/动画单个子类对象而不移动其他子类?