0

Grapics2D API に問題があります。画像のサイズを変更しようとしていますが、小さい画像を取得する代わりに、半分が白で半分が灰色の領域が表示されます。私は何を間違っていますか?レンダー ヒントの有無にかかわらず試してみましたが、うまくいきませんでした。または、指定されたサイズの新しい Buffered Image オブジェクトを提供する別の方法はありますか?

//height = 400, width = 600, capture_rect = screen size
BufferedImage img = robot.createScreenCapture(CAPTURE_RECT);
BufferedImage resized = new BufferedImage(WIDTH, HEIGHT, img.getType());
Graphics2D g = resized.createGraphics();
g.drawImage(img, 0, 0, WIDTH, HEIGHT, 0, 0, img.getWidth(), img.getHeight(), null);
g.dispose();
setImage(resized);
4

1 に答える 1

2

Image.getScaledImage の危険性に関する記事を参照してください。いくつかの推奨事項があります。

推奨されるコードは次のとおりです。

private float xScaleFactor, yScaleFactor = ...;
private BufferedImage originalImage = ...;

public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    int newW = (int)(originalImage.getWidth() * xScaleFactor);
    int newH = (int)(originalImage.getHeight() * yScaleFactor);
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                        RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.drawImage(originalImage, 0, 0, newW, newH, null);
}

新しい幅/高さを指定するだけで、自動的にスケーリングが行われるようです。

または、問題は img.getType() メソッドにある可能性があります。次のものを使用できるはずです:

BufferedImage.TYPE_INT_RGB // (or ARGB)

どれが最も効果的かを確認してください。

于 2013-04-21T23:31:55.023 に答える