Y at-il plus rapide pour obtenir un rembourrage de pixels à un BufferedImage que le dessin centré sur BufferedImage plus?rembourrage Java BufferedImage
Répondre
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);
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);
}
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é.
est le rembourrage uniquement à des fins d'affichage ou avez-vous besoin de créer une nouvelle image rembourrée? – objects
ceci est principalement pour générer une nouvelle image rembourrée, pas simplement le rendre. – m0s