Cara Skala Imej Buffered dengan Berkesan
Soalan:
Dalam kod berikut, percubaan untuk menskala BufferedImage menggunakan Graphics2D.scale() tidak berjaya. Apakah sebabnya?
BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded); Graphics2D grph = image.createGraphics(); grph.scale(2.0, 2.0); grph.dispose();
Jawapan:
Kaedah Graphics2D.scale() hanya menggunakan transformasi penskalaan kepada konteks grafik semasa tanpa sebenarnya mengubah suai BufferedImage. Untuk mengubah saiz imej itu sendiri, pendekatan berbeza harus diambil.
Penyelesaian Menggunakan AffineTransformOp:
Salah satu cara untuk menskala BufferedImage dengan berkesan ialah menggunakan AffineTransformOp. Ini membolehkan lebih banyak kawalan ke atas proses penskalaan, termasuk jenis interpolasi. Berikut ialah contoh:
BufferedImage before = getBufferedImage(encoded); int w = before.getWidth(); int h = before.getHeight(); BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); AffineTransform at = new AffineTransform(); at.scale(2.0, 2.0); AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); after = scaleOp.filter(before, after);
Dalam kod ini:
Nota:
Atas ialah kandungan terperinci Mengapakah Graphics2D.scale() Mengubah Saiz Imej Buffered dan Bagaimana Saya Boleh Menskalakannya dengan Berkesan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!