- 浏览: 735846 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
lingsuch:
Android网络连接判断与处理 -
月光照着我:
写的不错,作为笔记了
Android中LayoutInflater的使用 -
智博王锋:
好文章是要顶的!
Android中LayoutInflater的使用 -
云南白药:
...
Android中LayoutInflater的使用 -
万新one:
理解了许多。解释的不错。3Q.
Android中LayoutInflater的使用
package Assis; import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.awt.geom.*; import javax.swing.*; import java.io.*; // 图像缩小与放大演示 public class ScaleImageDemo extends JFrame { private static final long serialVersionUID = 1L; private JPanel panel = new JPanel(); // 面板panel用于容纳图像放大、缩小、还原按钮 private JButton jbFile = new JButton("打开图像文件"); // 打开图像文件按钮 private JButton jbZoomIn = new JButton("放大"); // 图像放大按钮 private JButton jbZoomOut = new JButton("缩小"); // 图像缩小按钮 private JButton jbReset = new JButton("还原"); // 图像还原按钮 ScalePane showImagePane = new ScalePane(); // 创建showImagePane对象用于绘制图像 Container content = getContentPane(); // 获得窗口的容器 // 构造函数 public ScaleImageDemo() { super("图像的缩小与放大"); // 调用父类构造器设置窗口标题栏 // 为按钮添加动作监听器 //jbFile.addActionListener(new ButtonActionListener()); jbZoomIn.addActionListener(new ButtonActionListener()); jbZoomOut.addActionListener(new ButtonActionListener()); jbReset.addActionListener(new ButtonActionListener()); jbFile.addActionListener(new ButtonActionListener()); // 把图像放大按钮、图像缩小按钮、图像还原按钮加入panel面板 panel.add(jbZoomIn); panel.add(jbZoomOut); panel.add(jbReset); panel.add(jbFile); // 把showImagePane文件选择组合框、控制面板、状态栏标签加入到窗口内容窗格 content.add(showImagePane, BorderLayout.CENTER); //content.add(jbFile, BorderLayout.NORTH); content.add(panel, BorderLayout.SOUTH); setSize(500, 400); // 设置窗口大小 setVisible(true); // 设置窗口可见 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序 } // 使用文件选择器载入图像 public void fileSelect() { JFileChooser chooser = new JFileChooser(); // 实例化文件选择器 chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);// 模式为仅打开文件 chooser.setCurrentDirectory(new File(".")); // 设置文件选择器当前目录 // 设置图像文件过滤器 chooser.setFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { // 可接受的文件类型 String name = file.getName().toLowerCase(); // 获取文件名 return name.endsWith(".png") || name.endsWith(".gif") || name.endsWith(".jpg") || name.endsWith(".jpeg") || file.isDirectory(); } public String getDescription() { return "图像文件"; // 文件描述 } }); int result = chooser.showOpenDialog(this); // 显示文件选择对话框 if (result == JFileChooser.APPROVE_OPTION) { // 得到用户行为 String fileName = chooser.getSelectedFile().getAbsolutePath(); // 得到选择的文件名 showImagePane.loadImage(fileName); // 截入图像并显示 //showImagePane.loadImage("d:/pic.png"); // 截入图像并显示 } } public static void main(String[] args) { new ScaleImageDemo(); } // 按钮事件处理类 class ButtonActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton button = (JButton) e.getSource(); // if (button == jbFile) { // fileSelect(); // } else if (button == jbZoomIn) { showImagePane.scaleX *= 1.25; // 图像x轴方向放大因子 showImagePane.scaleY *= 1.25; // 图像y轴方向放大因子 System.out.println(showImagePane.scaleX+","+showImagePane.scaleY); showImagePane.applyFilter(); // 过滤图像 showImagePane.repaint(); // 重绘showImagePane面板 jbReset.setEnabled(true); } else if (button == jbZoomOut) { showImagePane.scaleX *= 0.8; // 图像x轴方向缩小因子 showImagePane.scaleY *= 0.8; // 图像y轴方向缩小因子 showImagePane.applyFilter(); // 过滤图像 showImagePane.repaint(); // 重绘showImagePane面板 jbReset.setEnabled(true); } else if (button == jbReset) { showImagePane.scaleX = 1.0; // 图像x轴方向放大因子还原为1.0 showImagePane.scaleY = 1.0; // 图像y轴方向放大因子还原为1.0 showImagePane.applyFilter(); // 过滤图像 showImagePane.repaint(); // 重绘showImagePane面板 jbReset.setEnabled(false); } else if (button == jbFile) { fileSelect(); } } } // 显示图像的面板 class ScalePane extends JPanel { private static final long serialVersionUID = 1L; Image image; BufferedImage bufImage; // 用于显示的缓冲区图像 BufferedImage originalBufImage; // 原始缓冲区图像 Graphics2D bufImageG; // 缓冲区图像的图形环境 double scaleX = 1.0; // 图像水平方向的缩放因子 double scaleY = 1.0; // 图像竖直方向的缩放因子 // 截入图像 public void loadImage(String fileName) { image = this.getToolkit().getImage(fileName); // 取得图像 MediaTracker mt = new MediaTracker(this); // 实例化媒体加载器 mt.addImage(image, 0); // 增加图像到加载器中 try { mt.waitForAll(); // 等待图片加载 } catch (Exception ex) { ex.printStackTrace(); // 输出出错信息 } originalBufImage = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB); // 创建原始缓冲区图像 bufImage = originalBufImage; bufImageG = bufImage.createGraphics(); // 创建bufImage的图形环境 bufImageG.drawImage(image, 0, 0, this); // 传输源图像数据到缓冲区图像中 repaint(); // 重绘组件 } // 过滤图像 public void applyFilter() { if (bufImage == null) return; // 如果bufImage为空则直接返回 BufferedImage filteredBufImage = new BufferedImage((int) (image.getWidth(this) * scaleX), (int) (image.getHeight(this) * scaleY), BufferedImage.TYPE_INT_ARGB); // 过滤后的图像 AffineTransform transform = new AffineTransform(); // 仿射变换对象 transform.setToScale(scaleX, scaleY); // 设置仿射变换的比例因子 AffineTransformOp imageOp = new AffineTransformOp(transform, null);// 创建仿射变换操作对象 imageOp.filter(originalBufImage, filteredBufImage);// 过滤图像,目标图像在filteredBufImage bufImage = filteredBufImage; // 让用于显示的缓冲区图像指向过滤后的图像 repaint(); // 重绘组件 } // 重载容器的paintComponent()方法 public void paint(Graphics g) { super.paintComponent(g); if (bufImage != null) { Graphics2D g2 = (Graphics2D) g; g2.drawImage(bufImage, (this.getWidth() - bufImage.getWidth()) / 2, (this.getHeight() - bufImage.getHeight()) / 2, this); // 绘制图片 } } } }
发表评论
-
Swing中引入Android的NinePatch技术,让Swing拥有Android的外观定制能力
2012-09-21 09:22 1641【摘要】 本文诣在 ... -
JavaSwing实现支持合并拆分的JTable
2010-12-16 15:39 1992GridBagModel:抽象模型接口。该接口用于描述表格中单 ... -
JTable小例子,表格中使用JComboBox下拉按钮
2010-12-16 15:21 5439import java.awt.BorderLayout; ... -
配合滚动面板实现JTable上下翻页的效果
2010-12-16 14:26 3442import java.awt.BorderLayout; ... -
JScrollBar简单演示例子
2010-12-06 19:28 6639import java.awt.*; import java ... -
点击jtable的表头,数据会根据根据表头来排序
2010-12-06 11:47 5158import javax.swing.JFrame; imp ... -
重写JSplitPane的BasicSplitPaneUI
2010-09-18 13:39 1598import java.awt.Color; import ... -
Swing窗口初始最大化的方法
2010-08-20 11:09 79561.设置窗口最大(伪最大化) JFrame frame =n ... -
Tree目录实现拖拽功能演示实例(DragAndDrop)
2010-08-10 16:49 1815import java.awt.BorderLayout; ... -
设置JTextPane指定内容的颜色
2010-05-21 14:29 1393package Assis; import java.a ... -
TreesDemo
2010-05-04 11:19 1118import java.awt.*; import java ... -
TableDemo
2010-05-04 11:17 1215import javax.swing.JTable; imp ... -
分割面板演示JSplitPaneDemo
2010-05-04 11:12 1419//Java Swing 带分隔条的面板代码 impor ... -
StylesExample8
2010-04-08 12:55 1237import javax.swing.*; import j ... -
StylesExample7
2010-04-08 12:54 1029import javax.swing.*; import j ... -
StylesExample6
2010-04-08 12:52 1084import javax.swing.*; import j ... -
StylesExample5
2010-04-08 12:51 1013import javax.swing.*; import j ... -
StylesExample4
2010-04-08 12:50 1145import javax.swing.*; import j ... -
StylesExample3
2010-04-08 12:50 1029import javax.swing.*; import j ... -
StylesExample2
2010-04-08 12:49 1076import javax.swing.*; import j ...
相关推荐
Java图片缩小与放大特效,// 图像缩小与放大演示 public class ScaleImageDemo extends JFrame { private JPanel panel = new JPanel(); //面板panel用于容纳图像放大、缩孝还原按钮 private JButton ...
在实现图像放大缩小功能时,开发者可能会采用以下两种常见的方法: 1. **最近邻插值法**:这是一种简单快速的放大方法,但可能导致图像边缘锯齿状。它通过在原始像素周围寻找最近的颜色来填充新的像素位置。 2. **...
`ScaleImageDemo.java` 是一个Java应用程序,它展示了如何加载图片(例如 `2.jpg`),然后对其进行缩放。下面我们将深入解析这个过程。 1. **加载图片**: 首先,我们需要使用`javax.imageio.ImageIO`类的`read()`...
python学习资源
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
基于Andorid的音乐播放器项目设计(国外开源)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。
python学习资源
python学习资源
python学习一些项目和资源
【毕业设计】java-springboot+vue家具销售平台实现源码(完整前后端+mysql+说明文档+LunW).zip
HTML+CSS+JavaScarip开发的前端网页源代码
python学习资源
【毕业设计】java-springboot-vue健身房信息管理系统源码(完整前后端+mysql+说明文档+LunW).zip
成绩管理系统C/Go。大学生期末小作业,指针实现,C语言版本(ANSI C)和Go语言版本
1_基于大数据的智能菜品个性化推荐与点餐系统的设计与实现.docx
【毕业设计】java-springboot-vue交流互动平台实现源码(完整前后端+mysql+说明文档+LunW).zip
内容概要:本文主要探讨了在高并发情况下如何设计并优化火车票秒杀系统,确保系统的高性能与稳定性。通过对比分析三种库存管理模式(下单减库存、支付减库存、预扣库存),强调了预扣库存结合本地缓存及远程Redis统一库存的优势,同时介绍了如何利用Nginx的加权轮询策略、MQ消息队列异步处理等方式降低系统压力,保障交易完整性和数据一致性,防止超卖现象。 适用人群:具有一定互联网应用开发经验的研发人员和技术管理人员。 使用场景及目标:适用于电商、票务等行业需要处理大量瞬时并发请求的业务场景。其目标在于通过合理的架构规划,实现在高峰期保持平台的稳定运行,保证用户体验的同时最大化销售额。 其他说明:文中提及的技术细节如Epoll I/O多路复用模型以及分布式系统中的容错措施等内容,对于深入理解大规模并发系统的构建有着重要指导意义。
基于 OpenCV 和 PyTorch 的深度车牌识别
【毕业设计-java】springboot-vue教学资料管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
此数据集包含有关出租车行程的详细信息,包括乘客人数、行程距离、付款类型、车费金额和行程时长。它可用于各种数据分析和机器学习应用程序,例如票价预测和乘车模式分析。