Rumah >Java >javaTutorial >Bagaimana untuk Menskalakan BufferedImage dengan Betul di Java: Pensampelan Semula vs. Pemotongan?

Bagaimana untuk Menskalakan BufferedImage dengan Betul di Java: Pensampelan Semula vs. Pemotongan?

Linda Hamilton
Linda Hamiltonasal
2024-11-21 07:45:12501semak imbas

How to Properly Scale a BufferedImage in Java: Resampling vs. Cropping?

Menskalakan BufferedImage: Menyelidiki Pensampelan Semula, Bukan Memangkas

Percubaan anda untuk menskala BufferedImage menggunakan kelas Graphics2D mungkin tidak menghasilkan hasil yang diingini disebabkan oleh batasan yang dikenakan oleh kaedah tersebut. Kaedah skala() hanya mengubah konteks grafik semasa tanpa mengubah suai data imej asas.

AffineTransformOp: Penyelesaian Pilihan untuk Pensampelan Semula

Untuk pensampelan semula, kelas AffineTransformOp menyediakan fleksibiliti yang lebih besar dengan membenarkan anda menentukan jenis interpolasi. Interpolasi menentukan cara nilai piksel perantaraan dikira apabila imej diskalakan. Berikut ialah contoh menggunakan AffineTransformOp untuk menskalakan imej:

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 contoh ini:

  • AffineTransform digunakan untuk mentakrifkan transformasi penskalaan.
  • AffineTransformOp digunakan dengan jenis interpolasi TYPE_BILINEAR, yang memberikan hasil yang licin dan berkualiti tinggi.
  • filter() menggunakan transformasi dan sampel semula imej ke selepas BufferedImage.

Iki Utama

  • Gunakan AffineTransformOp untuk pensampelan semula imej, bukan memangkas.
  • Pilih jenis interpolasi yang sesuai untuk hasil yang optimum, seperti TYPE_BILINEAR.
  • Rujuk sumber berkaitan untuk contoh tambahan dan cerapan tentang penskalaan imej.

Atas ialah kandungan terperinci Bagaimana untuk Menskalakan BufferedImage dengan Betul di Java: Pensampelan Semula vs. Pemotongan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn