2010-07-19 117 views
3

有沒有更快的方法來實現像素填充到BufferedImage,而不是以更大的BufferedImage爲中心進行繪製?Java BufferedImage padding

+0

是僅用於顯示目的的填充,還是您需要創建一個新的填充圖像? – objects 2010-07-20 03:02:05

+0

這主要是爲了生成一個新的填充圖像,而不僅僅是渲染它。 – m0s 2010-07-20 06:43:21

回答

2

BufferedImage有一個構造函數,您可以在其中指定一個WriteableRaster。

採用默認緩衝圖像,將每個像素存儲在一個int中,它使用IntegerInterleavedRaster。

您可以使用ColorModel.getRGBDefault()的ColorModel。

int imageWidth = 638, imageHeight = 480; 
int dataImageWidth = 640; 

SampleModel sm = new SinglePixelPackedSampleModel(TYPE_INT, imageWidth, imageHeight, dataImageWidth, new int[] { 0xff0000, 0xff00, 0xff }); 
DataBuffer db = new DataBufferInt(dataImageWidth * imageHeight); 
WritableRaster r = Raster.createWritableRaster(sm, db, new Point()); 
BufferedImage image = new BufferedImage(ColorModel.getRGBDefault(), r, false, null); 

注意在SinglePixelPackedSampleModel(第二個參數)中的scanlineStride。

另一個更簡單的方法是使用BufferedImage的getSubimage方法。

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

要推遲到定心渲染,我喜歡這個approach由於finnw,其中this是合適的組件:

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); 
} 
2

創建一個使用BufferedImage的一個ImageIcon和圖標添加到JLabel。然後你可以在標籤上添加一個邊框來獲得你想要的填充。