2

画像の上部を下部に移動して、画像のストリップ (横方向) を削除したいと考えています。現在、私はこれを行っていますが、新しい BufferedImage を作成せずにこれを達成するためのより効率的な方法があると思います。

スニペット コード:

BufferedImage myImage = ...;
...
BufferedImage imgPart_1 = myImage.getSubimage(0, 0, myImage.getWidth(), (myImage.getHeight()/2)-50);
BufferedImage imgPart_2 = myImage.getSubimage(0, myImage.getHeight()/2, myImage.getWidth(), myImage.getHeight()/2);
BufferedImage newImage = new BufferedImage(myImage.getWidth(), myImage.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics g = newImage.createGraphics();
g.drawImage(imgPart_1, 0, 0, null);
g.drawImage(imgPart_2, 0, imgPart_1.getHeight(), null);

myImage = newImage;
...

前もって感謝します。

4

2 に答える 2

0

私にはかなり効率的に見えます:ここにパフォーマンスの問題があると本当に確信していますか?

新しいbufferedimageの作成を本当に避けたい場合は、myImageを宛先として使用できます。つまり、次のようにします。

Graphics g = myImage.createGraphics();
g.drawImage(imgPart_1, 0, 0, null);
g.drawImage(imgPart_2, 0, imgPart_1.getHeight(), null);

テストする必要がありますが、これはあなたの場合は問題なく機能すると思います(ソース領域と宛先領域が重なっていると、奇妙な影響が生じる可能性があります)。

于 2012-05-07T17:31:11.220 に答える
0

新しいイメージを作成する必要がありますが、自分でペイントする必要はありません。

CropImageFilterを使用して画像を取得できます。

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    CropImageFilter cropFilter = new CropImageFilter
            (x, y, imageWidth, imageHeight);
    Image croppedImage = toolkit.createImage(new FilteredImageSource
            (image.getSource(), cropFilter));
于 2012-05-07T17:23:55.290 に答える