- 浏览: 692543 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (181)
- Matlab (16)
- Java (26)
- autoHotkey (4)
- openCV (1)
- C++ (50)
- PDF-XChange Viewer (2)
- 学术 (11)
- javascript (4)
- linux (11)
- SWT (9)
- latex (7)
- GAE (2)
- windows (6)
- C# (3)
- PS (20)
- JNI (4)
- latex,批处理 (0)
- 批处理 (4)
- Android (5)
- 矩阵论 (1)
- SVM (1)
- 概率图模型 (0)
- Python (12)
- Eigen (5)
- 编程题 (1)
- MKL (1)
- 神经网络 (9)
- 最优化 (2)
- 摄影 (1)
- PPT (0)
- After Effects (3)
- CUDA (3)
- caffe (0)
- MXNet (2)
- svn (1)
- R (0)
- 虚拟机 (0)
- tensorflow (7)
- theano (1)
- Keras (1)
- vim (1)
- xgboost (1)
- spark (6)
- eclipse (2)
- word2vec (0)
- hadoop (1)
- dmlc (1)
- git (0)
最新评论
-
jeffersonz:
请问大神,这个插件记录下来的脚本为什么不能再Extendscr ...
PhotoShop - 记录PS的所有操作为JavaScript代码 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道cherish ...
Eigen的编译选项;MKL的使用 -
cherishLC:
Andy__Zou 写道cherishLC 写道Andy__Z ...
Eigen的编译选项;MKL的使用 -
Andy__Zou:
cherishLC 写道Andy__Zou 写道 您好,您的工 ...
Eigen的编译选项;MKL的使用
应用程序入口
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; @SuppressWarnings("serial") public class DrawNameOnBg extends JFrame { private JTextField textFrameRate; private JTextField textBlockSize; private JPanel panel; // private PicPanel picPanel = new PicPanel(); private PicPanelUseBuffer picPanel = new PicPanelUseBuffer(); public DrawNameOnBg() { setUndecorated(true); getContentPane().setLayout(new BorderLayout()); getContentPane().add(picPanel,BorderLayout.CENTER); getContentPane().add(getPanel(), BorderLayout.SOUTH); this.pack();//自动调整窗口大小 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null);//移至屏幕中心 setVisible(true); } public static void main(String[] args) { new DrawNameOnBg(); } /** * @return 按钮面板 */ protected JPanel getPanel() { if (panel == null) { panel = new JPanel(); //帧率 final JLabel label_1 = new JLabel(); label_1.setText("帧率:"); panel.add(label_1); textFrameRate = new JTextField(); textFrameRate.setText("20 "); panel.add(textFrameRate); //块大小 final JLabel label = new JLabel(); label.setText("块大小:"); panel.add(label); textBlockSize = new JTextField(); textBlockSize.setText(picPanel.subImWidth+" "); textBlockSize.setMinimumSize(new Dimension(30, 20)); panel.add(textBlockSize); //演示按钮 final JButton buttonShow = new JButton(); buttonShow.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { new Thread(){ @Override public void run() { try { int temp = Integer.valueOf(textBlockSize.getText().trim()); picPanel.subImWidth=temp; picPanel.subImWidth=temp<5?5:temp; picPanel.subImWidth=temp>120?120:picPanel.subImWidth; textBlockSize.setText(String.valueOf(picPanel.subImWidth)); } catch (Exception e2) { textBlockSize.setText(String.valueOf(picPanel.subImWidth)); } try { int temp = Integer.valueOf(textFrameRate.getText().trim()); if(temp<1) picPanel.frameRate=1; else if(temp>24) picPanel.frameRate=24; else picPanel.frameRate=temp; textFrameRate.setText(String.valueOf(picPanel.frameRate)); } catch (Exception e2) { textFrameRate.setText(String.valueOf(picPanel.frameRate)); } picPanel.restart(); }}.start(); } }); panel.add(buttonShow); buttonShow.setText("演示"); //退出按钮 final JButton buttonExit = new JButton(); buttonExit.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { System.exit(0); } }); buttonExit.setText("退出"); panel.add(buttonExit); //旋转复选框 final JCheckBox checkBoxRotate = new JCheckBox(); checkBoxRotate.setSelected(picPanel.rotate); checkBoxRotate.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { picPanel.rotate=!picPanel.rotate; } }); checkBoxRotate.setText("旋转"); panel.add(checkBoxRotate); } return panel; } }
主要的Jpanel
import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class PicPanelUseBuffer extends JPanel { /** * */ private static final long serialVersionUID = 1L; BufferedImage bgIm, nameIm;//背景图片和名字图片 BufferedImage[][][] nameSubIms;//分割后的图片,最后一维为各个方向的图片 Point posCenters[][];//各个小图的中心坐标 int subImWidth = 7;//分割后图片的宽度 int x; //名字图片的左上角坐标 int y = 30; int xCenter;//汇聚中心坐标 int yCenter = -30; int frames = 50;//帧数 boolean act = false;//是否动画,控制绘图用 int currentFrame;//当前帧 final int coefficient = 10;//将汇聚中心到小图的距离分为10份,作为小图移动的步长 int frameRate = 20;//帧率 AffineTransform tr; //仿射变换对象 final int directionNum = 8;//图片旋转方向数目 int direction = 0;//当前帧绘制的图片的方向的序号 boolean rotate = true;//控制是否旋转 public PicPanelUseBuffer() { try { setDoubleBuffered(true); bgIm = ImageIO.read(new File("bg.jpg")); //在背景上写上名字和E-mail Graphics2D g = bgIm.createGraphics(); g.setColor(Color.BLUE); g.setXORMode(Color.white); g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 20)); g.drawString("制作:2009310399 梁超 @ 清华", 5, g.getFontMetrics().getHeight()); String email = "E-mail: essay1986@yahoo.com.cn"; g.drawString(email, bgIm.getWidth() - SwingUtilities.computeStringWidth(g.getFontMetrics(), email) - 5, bgIm .getHeight() - 10); g.dispose(); nameIm = ImageIO.read(new File("name.png")); x = (bgIm.getWidth() - nameIm.getWidth()) >> 1;//使得名字绘制在中心 xCenter = bgIm.getWidth() / 2; tr = new AffineTransform(); init(); } catch (IOException e) { e.printStackTrace(); } } private void init() {//初始化分割后的图像 nameSubIms = new BufferedImage[nameIm.getHeight() / subImWidth][nameIm.getWidth() / subImWidth][directionNum]; posCenters = new Point[nameSubIms.length][nameSubIms[0].length]; for (int i = 0; i < nameSubIms.length; i++) { for (int j = 0; j < nameSubIms[i].length; j++) { nameSubIms[i][j][0] = nameIm.getSubimage(j * subImWidth, i * subImWidth, subImWidth, subImWidth);//旋转前的图像 int xC = x + j * subImWidth + (subImWidth >> 1);//小图的中心坐标 int yC = y + i * subImWidth + (subImWidth >> 1); // System.out.println(xC+" "+yC+" "+(xC - // xCenter)+" "+(yC - yCenter)); posCenters[i][j] = new Point(xC - xCenter, yC - yCenter);//到汇聚中心的向量 for (int k = 1; k < nameSubIms[i][j].length; k++) {//产生各个方向的图片,注意由于旋转后图片变大,有删减 nameSubIms[i][j][k] = new BufferedImage(subImWidth, subImWidth, BufferedImage.TYPE_INT_ARGB_PRE); Graphics2D g = nameSubIms[i][j][k].createGraphics(); double angle = Math.PI * 2 / directionNum * k; if (xC < xCenter) angle = -angle; // tr.rotate(angle, subImWidth / 2, subImWidth / 2); tr.setToRotation(angle, subImWidth / 2, subImWidth / 2); g.drawImage(nameSubIms[i][j][0], tr, this); // System.out.println(nameSubIms[i][j][k]+" "+subImWidth); } } } } @Override public void paint(Graphics g) { // final float alphaLow = 0.7f; super.paint(g); g.drawImage(bgIm, 0, 0, this);//绘制背景 Graphics2D g2 = (Graphics2D) (g); if (act) {//动画时 currentFrame--; direction++;//改变分割图片的方向 if (direction >= directionNum) direction = 0; //绘制分割后的图片 for (int j = 0; j < nameSubIms.length; j++) { for (int k = 0; k < nameSubIms[j].length; k++) { int xPos = xCenter + posCenters[j][k].x * Math.abs(currentFrame) / coefficient - (subImWidth >> 1);// + (int) ((Math.random() - // 0.5) * subImWidth); int yPos = yCenter + posCenters[j][k].y * Math.abs(currentFrame) / coefficient - (subImWidth >> 1);// + (int) ((Math.random() - // 0.5) * subImWidth); tr.setToTranslation(xPos, yPos); if (rotate) g2.drawImage(nameSubIms[j][k][direction], tr, this); else g2.drawImage(nameSubIms[j][k][0], tr, this); ; } } } else { // ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, // alphaLow); // g2.setComposite(ac); g2.drawImage(nameIm, x, y, this); } } public void restart() { if (subImWidth != nameSubIms[0][0][0].getWidth())//改变分割图像大小,重新初始化 init(); act = true; currentFrame = frames; while(currentFrame > -coefficient) { try { Thread.sleep(1000 / frameRate); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } repaint(); } act = false; repaint(); } @Override public void update(Graphics g) { repaint(); } @Override public Dimension getPreferredSize() { return new Dimension(bgIm.getWidth(), bgIm.getHeight()); } }
发表评论
-
lambda表达式
2014-08-20 21:47 1909仅作备忘,要学习还是看给的链接吧 1、C++ 中文介绍:htt ... -
利用Doxygen生成C++、Java文档
2013-04-08 16:15 4474示例程序、配置文件及doxygen常见参数文字版参见本文附件 ... -
删除citeulike导出的bib文件中的中文字符,使之能在WinEdt中读取
2012-12-06 18:57 1816在使用Citeulikehttp://citeulike.or ... -
使用jsoup分析网页
2012-12-05 16:12 2690之前用过HTMLParser,许久不更新的东西了,印象中也没那 ... -
JNI中基本类型数组的传递方法(无需拷贝数据!!!)
2012-10-23 17:11 183780、先来看一下主要用到哪些函数: GetIntArrayEle ... -
swig--在java、C#中调用c++写的DLL(以vs2012配置为例)
2012-10-02 22:06 72421、下载、安装: 到http://www.swig.org/d ... -
GAE学习笔记——静态文件、资源文件;GAE中使用velocity模板
2012-07-13 21:49 1456参考资料:https://developers.google. ... -
Google application engine 的Eclipse配置方法
2012-07-11 19:52 15971、安装google的eclipse插件 到https://d ... -
javadoc命令
2012-04-06 14:54 1392以下内容引用自(原文更全):http://hi.baidu.c ... -
java7文件夹监控
2012-04-04 11:23 2967java7的文件夹监控真是太烂了,折腾了一天,封装的差不多了, ... -
SWT学习笔记——JFace中TableViewer的使用及注意事项
2012-04-01 15:26 3450问题: 1、使用CellEditor ... -
SWT学习笔记——JFace中TableViewer的使用及注意事项
2012-04-01 14:52 0问题: 1、使用CellEditor时出现org.eclips ... -
SWT学习笔记——SWT、JFace的配置(含源代码、javadoc的获取)
2012-04-01 14:08 2470具体的可以看官方的http://wiki.eclipse.or ... -
SWT学习笔记7——组件背景图片,鼠标事件,鼠标样式
2012-03-31 11:00 3710import org.eclipse.swt.grap ... -
SWT学习笔记6——Shell相关的事件
2012-03-31 10:23 1558这里有详细的事件列表:http://blog.csdn.net ... -
SWT学习笔记5——简易的多标签文本编辑器
2012-03-30 22:18 2282import java.io.BufferedRead ... -
SWT学习笔记4——系统托盘 system tray
2012-03-30 15:59 1593import org.eclipse.swt.widg ... -
SWT学习笔记3——颜色、字体、图片
2012-03-30 09:41 5887import org.eclipse.swt.gra ... -
SWT笔记2——测试UI线程的事件处理
2012-03-29 21:36 1409import org.eclipse.swt.widg ... -
SWT笔记1,组件的关系,屏幕信息
2012-03-29 21:20 1429import org.eclipse.swt.widg ...
相关推荐
【JS+CSS3 3D图片分割拼接动画特效】是一种在网页中通过JavaScript和CSS3技术实现的创新视觉效果。这种特效将图片分解成多个3D片段,并通过动态拼接来创造出引人入胜的视觉体验。接下来,我们将深入探讨这一特效背后...
以下是一个简单的示例,展示了如何将文件分割成固定大小的小块: ```java import java.io.*; public class FileSplitter { public static void splitBySize(String sourceFilePath, int blockSizeInBytes) { try...
本示例“java实现文件的分割.rar”提供的SplitFile程序,利用了Java的随机访问流(RandomAccessFile)来实现文件的切割。下面我们将深入探讨这个过程涉及的关键知识点。 1. **随机访问流(RandomAccessFile)**: Java...
"Java语言程序设计(基础篇)习题答案"是一份针对初学者的重要参考资料,它旨在帮助学习者巩固Java基础知识,理解并掌握核心概念。这份资料可能包含一系列与Java编程相关的练习题及其解答,涵盖变量、数据类型、控制...
【Java拼图游戏程序】是一种基于Java编程语言开发的互动娱乐软件,主要目的是提供一个智力挑战,让玩家通过移动和旋转各个小块来重组一幅完整的图像。这种游戏通常以图像碎片的形式呈现,玩家需要利用逻辑思维和空间...
通过将大图分割成若干小块,我们可以分别加载这些小图片,从而加快页面的加载速度,尤其是在网络带宽有限的情况下。 "Picture Split"这个软件很可能就是这样一个实用工具,它可以自动根据用户的需求,无论是按数量...
2. 图片分割:为了创建拼图,程序需要将图片切割成多个部分。这可能涉及到图像处理算法,如二维数组来存储每个小块的位置和图像数据。 3. 用户交互:游戏需要响应用户的鼠标点击事件,允许用户选择和移动拼图块。这...
1. 图像处理:在这个Java程序中,原始图片被分割成多个小块,这可能使用了Java的`BufferedImage`类和图像处理库,如Java Advanced Imaging (JAI) 或 Apache Commons Imaging。开发者可能通过计算图像的宽度和高度来...
在GIS(地理信息系统)领域,地图瓦片是一种将大尺寸地图分割成小块图片的技术,通常用于提高网络地图服务的加载速度和显示效率。这个JAVA工程提供了一整套解决方案,可以帮助用户生成、裁剪、管理和使用百度地图的...
【图片分割器】是一款基于C#编程语言开发的实用工具,专用于将一张大尺寸的图像等比例地分割成多张小图片。这个程序的主要功能是解决用户在处理大型图像时遇到的问题,如需要批量裁剪或分别处理图像的各个部分。通过...
在日常工作中,我们可能遇到需要将一个大文件分成小块以便于传输、存储或管理的情况,或者需要将这些小块再重新组合成原始文件。这个程序就是为了解决这样的问题而设计的。 在描述中提到了“.pp”文件格式,这是一...
总结来说,这个程序展示了如何使用C++Builder实现图像的均匀分割逼近,通过将图像分割成小块并用平均灰度值替换像素点,达到平滑图像、改变视觉效果的目的。这种技术在许多应用中都有用武之地,比如图像去噪、简化...
**图片分割**是图像处理中的一个关键步骤,它通常指的是将一幅图像分解成多个有意义的部分或区域。在实际应用中,这可以用于图像识别、对象检测、医疗影像分析等。图片分割技术包括像素级分割、区域生长、边缘检测等...
在美工设计领域,Atom图片分割器能够帮助设计师快速处理大图,例如将背景图片分割成多个小块,以便在网页或应用中实现平滑的滚动效果。同时,对于需要在不同平台上展示的设计作品,如手机壁纸、社交媒体封面等,通过...
通过图片分割,可以将大图切成若干个小块,每个小块适合小屏幕显示或打印,然后按照顺序组合,就能复原整张大图。这种方式使得用户可以在有限的硬件条件下欣赏或打印高分辨率的图像。 图片分割软件通常具备以下功能...
本小程序“文件分割分割文件小程序”专注于这一功能,提供了便捷的文件分割与复原服务。 首先,我们来详细了解文件分割的概念。文件分割是指将一个大文件拆分成若干个小文件,每个小文件的大小可以根据需要进行设定...
通过图片分割,我们可以将一张完整的人物图片分割成多个部分,比如上半身和下半身,然后分别对这些部分进行独立的动画处理。这样可以降低内存消耗,因为只需要存储和显示必要的部分,而不是整个角色的每一帧。 在...