




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
练习63 手电筒效果本例知识点一句话讲解新学知识使用ColorModel类制作颜色模板使用PixelGrabber类处理像素效果已学知识使用Color类处理颜色使用Graphics类处理图像一、练习具体要求本练习制作手电筒效果的实例。如图63-1所示,程序执行后,创建一个能够加载图片的面板,随后将会出现一束绿色的光束在图片上方扫描,形成手电筒效果。手电筒的光束颜色和光束大小都可以通过stn_bump.html文件的参数进行设置。当鼠标移动到图片上方时,窗口左下方的状态栏将会出现响应的动作提示。二、程序及注释(1)编程思路:首先,本练习因为要制作手电筒效果的实例,所以首先要生成程序界面:在函数public void init()中,首先通过函数int getParameter(String s1, int s2)和函数String getParameter(String s1, String s2)得到stn_bump.html文件中的参数,然后通过语句m_dimWindow = new Dimension(getSize().width, getSize().height)得到屏幕尺寸,resize(m_dimWindow)语句设置屏幕尺寸。最后通过m_colormodel = new DirectColorModel(24, 0xff0000, 65280, 255)制作颜色模板。然后,为了实现手电筒效果,所以要进行颜色设置,在函数public void run()中,首先通过语句mediatracker.addImage(m_imgColor, 0)和ediatracker.addImage(m_imgBump, 0)设置颜色,然后通过实例化PixelGrabber类来进行像素的颜色设置,实现手电筒的光照效果。(2)程序实现及注释:/stn_bump.javaimport java.applet.Applet;import java.applet.AppletContext;import java.awt.*;import java.awt.image.*;import .MalformedURLException;import .URL;public class stn_bump extends Applet implements Runnable /变量定义 private String m_bmColor = null; private String m_bmBump = null; private String m_link = null; private String m_descr = null; private int m_garbage = 0; private int m_sleep = 0; private int m_hred = 0; private int m_hgreen = 0; private int m_hblue = 0; private int m_hexp = 0; private final String PARAM_bmColor = color; private final String PARAM_bmBump = bump; private final String PARAM_link = link; private final String PARAM_descr = descr; private final String PARAM_garbage = garbage; private final String PARAM_sleep = sleep; private final String PARAM_hred = hred; private final String PARAM_hgreen = hgreen; private final String PARAM_hblue = hblue; private final String PARAM_hexp = hexp; Dimension m_dimWindow = null; boolean m_bImgLoaded = false; Image m_imgColor = null; Image m_imgBump = null; Thread m_animator = null; ColorModel m_colormodel = null; Dimension m_dimBitmap = null; int m_rawColor = null; int m_rawBump = null; int m_rawPhong = null; int m_offsetBump = null; int m_bitmap = null; boolean m_bMouseMove = false; int m_iCenterX = 0; int m_iCenterY = 0; /启动小程序 public void start() if(m_animator = null) m_animator = new Thread(this); m_animator.setPriority(10); m_animator.start(); /停止小程序 public void stop() m_animator = null; /响应鼠标进入 public boolean mouseEnter(Event event, int i, int j) if(m_animator != null) showStatus(m_descr); m_bMouseMove = true; return true; /响应鼠标退出 public boolean mouseExit(Event event, int i, int j) if(m_animator != null) showStatus(); m_bMouseMove = false; return true; /响应鼠标按下 public boolean mouseDown(Event event, int i, int j) if(m_animator != null & m_link != null) URL url; try url = new URL(m_link); catch(MalformedURLException _ex) showStatus(URL + m_link + is invalid!); return true; getAppletContext().showDocument(url); return true; /画屏函数 public void paint(Graphics g) if(m_animator != null) MemoryImageSource memoryimagesource = new MemoryImageSource(m_dimBitmap.width, m_dimBitmap.height, m_colormodel, m_bitmap, 0, m_dimBitmap.width); Image image = createImage(memoryimagesource); g.drawImage(image, 0, 0, m_dimWindow.width, m_dimWindow.height, this); /刷新图片 public boolean imageUpdate(Image image, int i, int j, int k, int l, int m) return true; /运行小程序 public void run() float f3 = 0.0F; float f4 = 0.0F; if(!m_bImgLoaded) repaint(); MediaTracker mediatracker = new MediaTracker(this); m_imgColor = getImage(getDocumentBase(), m_bmColor); m_imgBump = getImage(getDocumentBase(), m_bmBump); mediatracker.addImage(m_imgColor, 0); mediatracker.addImage(m_imgBump, 0); try mediatracker.waitForAll(); m_bImgLoaded = !mediatracker.isErrorAny(); catch(InterruptedException _ex) if(!m_bImgLoaded) stop(); getGraphics().drawString(Error loading images!, 10, 40); return; if(m_imgColor.getHeight(this)!=m_imgBump.getHeight(this) | m_imgColor.getWidth(this) != m_imgBump.getWidth(this) stop(); getGraphics().drawString( Images must have same extends!, 10, 40); return; m_dimBitmap = new Dimension(m_imgColor.getWidth(this), m_imgColor.getHeight(this); m_bitmap=new intm_dimBitmap.width * m_dimBitmap.height; m_rawColor=new intm_dimBitmap.width * m_dimBitmap.height; PixelGrabber pixelgrabber = new PixelGrabber(m_imgColor, 0, 0, m_dimBitmap.width, m_dimBitmap.height, m_rawColor, 0, m_dimBitmap.width); try pixelgrabber.grabPixels(); catch(InterruptedException _ex) stop(); getGraphics().drawString( Error retrieving image data of + m_bmColor + !, 10, 40); return; m_rawBump = new intm_dimBitmap.width * m_dimBitmap.height; PixelGrabber pixelgrabber1 = new PixelGrabber(m_imgBump, 0, 0, m_dimBitmap.width, m_dimBitmap.height, m_rawBump, 0, m_dimBitmap.width); try pixelgrabber1.grabPixels(); catch(InterruptedException _ex) stop(); getGraphics().drawString( Error retrieving image data of + m_bmBump + !, 10, 40); return; m_offsetBump = new intm_dimBitmap.width * m_dimBitmap.height; for(int p_row = 1; p_row m_dimBitmap.height - 1; p_row+) int p_col = p_row * m_dimBitmap.width + 1; for(int i = 1; i 1) - (m_rawBumpp_col + 1 & 0xff) 1); int pBump2 = (m_rawBumpp_col - m_dimBitmap.width & 0xff) 1) - (m_rawBumpp_col + m_dimBitmap.width & 0xff) 1); m_offsetBumpp_col = (pBump1 & 0xff) + (pBump2 & 0xff) 1.0F) light_color = 0.0F; else light_color = (float)Math.pow(Math.cos(Math.sqrt(edge1 + edge2) * Math.PI) / 2D), m_hexp); int setRed = (int)(light_color * (float)m_hred); int setGreen = (int)(light_color * (float)m_hgreen); int setBlue = (int)(light_color * (float)m_hblue); if(setRed 8 & setGreen 8 & setBlue 8) setRed = 0; setGreen = 0; setBlue = 0; m_rawPhongbase2 = setBlue + (setGreen 8) + (setRed 16); base2+; while(+j 256); while(+base1 256); repaint(); int i5 = m_garbage; do do if(!m_bMouseMove) m_iCenterX = (int)(128D - (double) (float)m_dimBitmap.width / 2.0F) + (Math.sin(f3) * (double)(float)m_dimBitmap.width) / 2D) / 2D); m_iCenterY = (int)(128D - (double) (float)m_dimBitmap.height / 2.0F) + (Math.sin(f4) * (double)(float)m_dimBitmap.height) / 2D) / 2D); f3 += 0.04846F; f4 += 0.06145F; for(int p_row=0;p_rowm_dimBitmap.height;p_row+) int light_x = p_row * m_dimBitmap.width; int light_y = (p_row / 2 + m_iCenterY) * 256 + m_iCenterX; for(int p_col=0; p_col 0xff0000) cRed = 0xff0000; if(cGreen 65280) cGreen = 65280; if(cBlue 255) cBlue = 255; m_bitmaplight_x=cRed|cGreen|cBlue; else m_bitmaplight_x = pColor; light_x+; paint(getGraphics(); if(-i5 0) System.gc(); i5 = m_garbage; while(m_sleep = 0 | m_animator = null); try Thread.sleep(m_sleep); catch(InterruptedException _ex) stop(); return; while(true); /得到一个字符串和一个整数型的参数 int getParameter(String s1, int s2) String s = getParameter(s1) ; return (s != null) ? Integer.parseInt(s) : s2 ; /得到两个字符串的参数 String getParameter(String s1, String s2) String s = getParameter(s1) ; return (s != null) ? s : s2 ; /初始化小程序 public void init() m_bmColor = getParameter(color,color.gif); m_bmBump = getParameter(bump,bump.gif); m_link = getParameter(link,localhost); m_descr = getParameter(descr,Hello World); m_garbage = getParameter(garbage,16); m_sleep = getParameter(sleep,20); m_hred = getParameter(hred,32); m_hgreen = getParameter(hgreen,192); m_hblue = getParameter(hblue,192); m_hexp = getParameter(hexp,8); m_dimWindow = new Dimension(getSi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北艺术职业学院《果树病虫害防治》2023-2024学年第二学期期末试卷
- 广州应用科技学院《中国戏曲说唱分析基础》2023-2024学年第二学期期末试卷
- 青海警官职业学院《形体与舞蹈1》2023-2024学年第二学期期末试卷
- 图木舒克职业技术学院《移动编程技术》2023-2024学年第二学期期末试卷
- 山西医科大学《经济心理学》2023-2024学年第二学期期末试卷
- 厦门南洋职业学院《畜产品加工工艺学》2023-2024学年第二学期期末试卷
- 湖北财税职业学院《微生物与免疫实验》2023-2024学年第二学期期末试卷
- 大专重修考试题库及答案
- 书记员考试试题及答案
- 山东商业职业技术学院《建筑装饰》2023-2024学年第二学期期末试卷
- “项目路演”评分细则
- 部编版小学语文四年级下册教师教学用书(教学参考)完整版
- pvc生产工艺流程图
- 利用情境引导学生学习的教学课件设计
- 国开电大专科《办公室管理》期末纸质考试总题库2024版
- 仓储绩效考核实施细则仓库人员绩效考核内容与评分标准
- 18年浙江高考英语真题高频词汇超全整理
- 10kv及以下电力客户受电工程中间检查和竣工检验规范
- 工业互联网平台架构
- JJF 1030-2023温度校准用恒温槽技术性能测试规范
- 肌肉注射评分标准
评论
0/150
提交评论