Как установить размер изображения с помощью RescaleOp
Я пишу тестовое приложение. Чтобы установить Alpha для изображения, я использую метод paintComponent. Смотреть следующий fragment …
public class TestImage extends JLabel{ public void paintComponent( Graphics g ) { super.paintComponent( g ); Graphics2D g2d=(Graphics2D)g; g2d.drawImage(this.bImage, rop, 0, 0); } public void setRescaleOp(RescaleOp rop){this.rop=rop;} }
Как вы видете,
g2d.drawImage (this.bImage, rop, 0, 0);
не позволяет устанавливать ширину и высоту, как если бы я использовал g.drawImage (bImage, 0, 0, width, height, null);
Так что вопрос … Как установить ширину и высоту для bImage в этом случае?
Любой полезный комментарий оценен
Андрей
- Масштабировать пользовательский интерфейс для нескольких разрешений / различных устройств
- JTable Right Align Header
- Пользовательская строка заголовка без дополнения (Android)
- Как создать приложение C ++ / CLI Winforms в VS2012?
- Выберите все содержимое текстового поля, когда он получает фокус (Vanilla JS или jQuery)
- Есть ли представление для ввода целых чисел в Android?
- Подвижные столбцы со значением с помощью java
- Почему этот код Parallel.ForEach заморозит программу?
Первый filter()
, как показано здесь , а затем масштабируйте с помощью drawImage()
или AffineTransformOp
, как показано здесь .
Приложение: В качестве альтернативы вы можете сначала масштабировать изображение (используя любой из указанных выше способов), а затем использовать RescaleOp
в drawImage()
.
В RescaleOp
от RescaleOp
масштабирует цветные полосы изображения; он не изменяет размеры изображения. Чтобы избежать путаницы, размерное масштабирование иногда называют передискретизацией .
Приложение: Вот пример использования drawImage()
для повторной RescaleOp
и RescaleOp
для настройки альфы изображения.
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.awt.image.RescaleOp; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; /** * @see https://stackoverflow.com/questions/5838842 * @see https://stackoverflow.com/questions/5864490 */ public class AlphaTest { private static void display() { JFrame f = new JFrame("AlphaTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ImageIcon icon = new ImageIcon("image.jpg"); final AlphaPanel ip = new AlphaPanel(icon, 0.75); final JSlider slider = new JSlider(); slider.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { int v = slider.getValue(); ip.setAlpha((float) v / slider.getMaximum()); ip.repaint(); } }); f.add(ip, BorderLayout.CENTER); f.add(slider, BorderLayout.SOUTH); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { display(); } }); } } class AlphaPanel extends JPanel { private BufferedImage bi; private float[] scales = {1f, 1f, 1f, 0.5f}; private float[] offsets = new float[4]; private RescaleOp rop; public AlphaPanel(ImageIcon icon, double scale) { int width = (int) (scale * icon.getIconWidth()); int height = (int) (scale * icon.getIconHeight()); this.setPreferredSize(new Dimension(width, height)); this.bi = new BufferedImage( width, height, BufferedImage.TYPE_INT_ARGB); this.bi.createGraphics().drawImage( icon.getImage(), 0, 0, width, height, null); rop = new RescaleOp(scales, offsets, null); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.drawImage(bi, rop, 0, 0); } public void setAlpha(float alpha) { this.scales[3] = alpha; this.rop = new RescaleOp(scales, offsets, null); } }