Java缓冲区图像填充

Java缓冲区图像填充,java,java-2d,bufferedimage,Java,Java 2d,Bufferedimage,有没有比在较大的BuffereImage上居中绘制更快的方法来实现对BuffereImage的像素填充?要将居中延迟到渲染,我喜欢这样,因为这是一个合适的组件: private BufferedImage image; .... @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.translate(

有没有比在较大的BuffereImage上居中绘制更快的方法来实现对BuffereImage的像素填充?

要将居中延迟到渲染,我喜欢这样,因为
这是一个合适的组件:

private BufferedImage image;
....
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.translate(this.getWidth() / 2, this.getHeight() / 2);
    g2d.translate(-image.getWidth() / 2, -image.getHeight() / 2);
    g2d.drawImage(image, 0, 0, null);
}

使用BuffereImage创建图像图标,并将图标添加到JLabel。然后,您只需向标签添加边框即可获得所需的填充。

BuffereImage有一个构造函数,您可以在其中指定一个WriteableRaster

在默认缓冲图像的最前端拾取,将每个像素存储在一个整数中,它使用IntegerInterleavedRaster

您可以使用ColorModel.getRGBDefault()创建ColorModel

请注意SinglePixelPackedSampleModel中的scanlineStride(最后一个参数)

另一个更简单的方法是使用BuffereImage的getSubimage方法

BufferedImage fullImage = new BufferedImage(dataImageWidth, imageHeight);
BufferedImage subImage = fullImage.getSubimage(0, 0, imageWidth, imageHeight);

填充只是为了显示还是需要创建一个新的填充图像?这主要是为了生成一个新的填充图像,而不仅仅是渲染它。
BufferedImage fullImage = new BufferedImage(dataImageWidth, imageHeight);
BufferedImage subImage = fullImage.getSubimage(0, 0, imageWidth, imageHeight);