0
イメージを受け取り、それを縮小する方法があります。 私がキャンバスを使用しているのは、画像が自動的に拡大縮小されると思うからです。キャンバスでスケーリングした後にBufferedImageがすべて黒くなる
変換後、出力イメージは完全に黒です。誰でもこれを修正する方法についての手掛かりがありますか?
try {
InputStream in = new ByteArrayInputStream(f.getBytes());
BufferedImage image = ImageIO.read(in);
File beforescale = new File("beforescale.jpg");
ImageIO.write(image, "jpg", beforescale); //works
Canvas canvas = new Canvas();
canvas.setSize(100, 100);
canvas.paint(image.getGraphics());
image = canvasToImage(canvas);
File outputfile = new File("testing.jpg");
ImageIO.write(image, "jpg", outputfile); //all black
response.getWriter().print(canvas);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private BufferedImage canvasToImage(Canvas cnvs) {
int w = cnvs.getWidth();
int h = cnvs.getHeight();
int type = BufferedImage.TYPE_INT_RGB;
BufferedImage image = new BufferedImage(w,h,type);
Graphics2D g2 = image.createGraphics();
cnvs.paint(g2);
g2.dispose();
return image;
}
ご返信ありがとうございます。私はgetScaledInstanceが良い結果を出さないことを読んだので、それを回避しようとしたのです。まだそれは本当ですか? (http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html) –
@エミール - その記事から「一般的な苦情はパフォーマンスが悪い」 。これが本当かどうか分からない、それはあなたにとって遅すぎるのだろうか?とにかく 'getScaledInstance()'を使ってキャンバスを使うとおそらく助けにならないでしょう。別のルートを使用する場合は、記事に記載されているルートの1つを選択します。 – Ishtar