2010-07-19 5 views
3

Y at-il plus rapide pour obtenir un rembourrage de pixels à un BufferedImage que le dessin centré sur BufferedImage plus?rembourrage Java BufferedImage

+0

est le rembourrage uniquement à des fins d'affichage ou avez-vous besoin de créer une nouvelle image rembourrée? – objects

+0

ceci est principalement pour générer une nouvelle image rembourrée, pas simplement le rendre. – m0s

Répondre

2

BufferedImage a un constructeur où vous obtenez de spécifier un WriteableRaster.

cueillette à la une image en mémoire tampon par défaut, le stockage de chaque pixel dans un int, on utilise un IntegerInterleavedRaster.

Le modèle colorimétrique vous pouvez utiliser ColorModel.getRGBDefault().

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

Indication du scanlineStride en SinglePixelPackedSampleModel (avant-dernier paramètre).

Une autre approche beaucoup plus simple est d'utiliser la méthode de getSubimage BufferedImage.

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

de reporter le centrage rendu jusqu'à, j'aime ce approach en raison de finnw, où this est un composant approprié:

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

Créer un ImageIcon en utilisant le BufferedImage et ajouter l'icône à un JLabel. Ensuite, vous pouvez simplement ajouter une bordure à l'étiquette pour obtenir le rembourrage désiré.