より大きなBufferedImageを中心に描画するよりも、BufferedImageへのピクセルのパディングを実現するより速い方法はありますか?
2455 次
3 に答える
3
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(最後から2番目のパラメーター)のscanlineStrideに注目してください。
もう1つのはるかに簡単なアプローチは、BufferedImageのgetSubimageメソッドを使用することです。
BufferedImage fullImage = new BufferedImage(dataImageWidth, imageHeight);
BufferedImage subImage = fullImage.getSubimage(0, 0, imageWidth, imageHeight);
于 2010-07-20T02:58:29.093 に答える
2
BufferedImageを使用してImageIconを作成し、アイコンをJLabelに追加します。次に、ラベルに境界線を追加するだけで、目的のパディングを取得できます。
于 2010-07-20T01:55:00.883 に答える
1
レンダリングまでセンタリングを延期するには、 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);
}
于 2010-07-20T00:42:13.073 に答える