1、平移图形
public void paint(Graphics g) { // 重写paint()方法 Graphics2D g2 = (Graphics2D) g; // 获得Graphics2D对象 Rectangle2D.Float rect = new Rectangle2D.Float(10, 10, 80, 50);// 创建矩形对象 BasicStroke stroke = new BasicStroke(10); // 创建宽度是10的笔画对象 g2.setStroke(stroke);// 设置笔画对象 g2.clearRect(0, 0, 338, 230); // 清除原有内容 if (flag == 0) { g2.translate(0, 0);// 平移坐标轴 g2.draw(rect);// 绘制矩形 } else if (flag == 1) { g2.translate(120, 60);// 平移坐标轴 g2.draw(rect);// 绘制矩形 } }
2、绘制实现这样的图案
public void paint(Graphics g) { // 重写paint()方法 Graphics2D g2 = (Graphics2D)g; // 获得Graphics2D对象 Ellipse2D.Float ellipse = new Ellipse2D.Float(80, 95, 160, 10);// 创建椭圆对象 Random random = new Random();// 创建随机数对象 int i=0; while (i<100){ int R = random.nextInt(256);//随机产生颜色的R值 int G = random.nextInt(256);//随机产生颜色的G值 int B = random.nextInt(256);//随机产生颜色的B值 Color color = new Color(R,G,B);//创建新的颜色对象 g2.setColor(color);//指定颜色 g2.rotate(10,160,100);// 旋转画布,以坐标点(160,100)为原点旋转10度。 g2.draw(ellipse);// 绘制椭圆 i++; }
3、实现字以弧形出现
int width = getWidth();// 获得面板宽度 int height = getHeight();// 获得面板高度 char[] array = " 明日科技有限公司 ".toCharArray();// 把字符串转换为字符数组 int len = array.length * 2;// 定义半径 Font font = new Font("宋体", Font.BOLD, 10);// 创建新字体 g2.setFont(font);// 设置字体 double angle = 0;// 初始角度 for (int i = 0; i < array.length; i++) {// 遍历字符串中的字符 int x = (int) (len * Math.sin(Math.toRadians(angle + 270)));// 计算每个文字的位置 int y = (int) (len * Math.cos(Math.toRadians(angle + 270)));// 计算每个文字的位置 g2.drawString(array[i] + "", width / 2 + x-75 , height / 2 - y-40 );// 绘制每个字符,其中168和95是坐标平移值 angle = angle + 360d / array.length;// 改变角度
实现结果:
4、图形的加运算
使用Area类实现:将指定 Area
的形状添加到此 Area
的形状中。得到的 Area
形状将包括两个形状的并集,或者包含此 Area
或指定 Area
中的所有区域。
Graphics2D g2 = (Graphics2D)g; // 获得Graphics2D对象 Ellipse2D.Float ellipse1 = new Ellipse2D.Float(20, 70, 160, 60);// 创建椭圆对象 Ellipse2D.Float ellipse2 = new Ellipse2D.Float(120, 20, 60, 160);// 创建椭圆对象 Area area1 = new Area(ellipse1); // 创建区域椭圆 Area area2 = new Area(ellipse2); // 创建区域椭圆 area1.add(area2);// 两个区域椭圆进行加运算 g2.draw(area1); // 绘制加运算后的区域椭圆
5、图形的减运算
同上, 从此 Area
的形状中减去指定 Area
的形状。得到的 Area
形状将包括那些仅包括那些包含在此 Area
且不包含在指定 Area
中的区域。
Graphics2D g2 = (Graphics2D)g; // 获得Graphics2D对象 Ellipse2D.Float ellipse1 = new Ellipse2D.Float(20, 20, 160, 160);// 创建圆对象 Ellipse2D.Float ellipse2 = new Ellipse2D.Float(90, 20, 160, 160);// 创建圆对象 Area area1 = new Area(ellipse1); // 创建区域圆 Area area2 = new Area(ellipse2); // 创建区域圆 area1.subtract(area2);// 两个区域圆进行减运算 g2.fill(area1); // 绘制减运算后的区域圆
6、图形的其他运算
都是通过Area类进行实现
intersect:图形的交运算;将此 Area
的形状设置为其当前形状与指定 Area
形状的交集。得到的 Area
形状将仅包括那些既包含在此 Area
中也包含在指定 Area
中的区域。
exclusiveOr:图形的异或运算;将此 Area
的形状设置为其当前形状与指定 Area
形状的组合区域,并减去其交集。得到的 Area
形状将仅包括那些包含在此 Area
或指定 Area
中、但不同时出现在两者中的区域。
7、绘制图片
img = Toolkit.getDefaultToolkit().getImage("img/image.jpg"); // 获取图像资源 g.drawImage(img, 0, 0, null); // 绘制指定的图片
8、使用滑块对象进行图形的缩放
(1)滑块对象的实现与监听器的设置(ChangeListener)
slider = new JSlider();// 创建滑块对象 slider.addChangeListener(new ChangeListener() { public void stateChanged(final ChangeEvent e) { imagePanel.repaint();// 重新调用面板类的paint()方法 } });
(2)图形的缩放
public void paint(Graphics g) { g.clearRect(0, 0, this.getWidth(), this.getHeight());// 清除绘图上下文的内容 imgWidth = img.getWidth(null); // 获取图片宽度 imgHeight = img.getHeight(null); // 获取图片高度 float value = slider.getValue();// 滑块组件的取值 newW = (int) (imgWidth * value / 50);// 计算图片缩放后的宽度 newH = (int) (imgHeight * value / 50);// 计算图片缩放后的高度 g.drawImage(img, 0, 0, newW, newH, null);// 绘制指定大小的图片 }
9、图形的翻转
g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, this);// 绘制图像
使用上述代码完成:绘制当前可用的指定图像的指定区域,动态地缩放图像使其符合目标绘制表面的指定区域。执行图像从源到目标的缩放:源矩形的第一个坐标被映射到目标矩形的第一个坐标,第二个源坐标被映射到第二个目标坐标。按需要缩放和翻转子图像以保持这些映射关系。
如果要实现水平翻转:交换sx1与sx2;
如果要实现垂直翻转:交换sy1与sy2;
也就是说:实现源矩形(sx1, sy1, sx2, sy2)到目标矩形(dx1, dy1, dx2, dy2)的映射。
10、图片的旋转
同样使用rotate
Graphics2D g2 = (Graphics2D) g; // 获得Graphics2D对象 g2.drawImage(img, 80, 10, 260, 150, this); // 绘制指定大小的图片 //将用角度表示的角转换为近似相等的用弧度表示的角。 g2.rotate(Math.toRadians(10)); // 将图片旋转10度 g2.drawImage(img, 80, 10, 260, 150, this); // 绘制指定大小的图片
11、图像的倾斜
同样使用shear
g2.shear(0.5, 0.5);// 倾斜图像
12、实现拖动改变图形大小
只需设置重绘即可
private int pressPanelX = 0, pressPanelY = 0;// 鼠标按下点的X、Y坐标 private int pressX = 0, pressY = 0;// 鼠标按下点在屏幕上的X、Y坐标 private int releaseX = 0, releaseY = 0;// 鼠标释放点在屏幕上的X、Y坐标 private Robot robot = null; // 声明Robot对象 private BufferedImage buffImage = null; // 声明缓冲图像对象 public void paint(Graphics g) { g.clearRect(0, 0, this.getWidth(), this.getHeight());// 清除绘图上下文的内容 try { robot = new Robot();// 创建Robot对象 if (releaseX - pressX > 0 && releaseY - pressY > 0) { Rectangle rect = new Rectangle(pressX, pressY, releaseX - pressX, releaseY - pressY);// 创建Rectangle对象 buffImage = robot.createScreenCapture(rect);// 获得缓冲图像对象 cutImagePanel.repaint(); // 调用CutImagePanel面板的paint()方法 } } catch (AWTException e1) { e1.printStackTrace(); } g.drawImage(buffImage, 0, 0, releaseX - pressX, releaseY - pressY, this);// 绘制图像 }
13、实现图像的亮度调整
(1)先创建一个BufferedImage对象,再在这个缓冲图像上绘制图片
image = new BufferedImage(img.getWidth(this), img.getHeight(this),BufferedImage.TYPE_INT_RGB);// 创建缓冲图像对象 image.getGraphics().drawImage(img, 0, 0, null);// 在缓冲图像对象上绘制图像 oldImage = image;// 存储原来的图像对象,用于以后的恢复操作
(2)调亮调暗都需要使用到RescaleOp类
RescaleOp类:通过将每个像素的样本值乘以一个缩放因子,然后加上一个偏移量,此类对源图像中数据进行逐像素重缩放。缩放后的样本值被限制在目标图像中的最小/最大可表示形式。
button_3.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { float a = 1.0f;// 定义缩放因子 float b = -5.0f;// 定义偏移量 RescaleOp op = new RescaleOp(a,b,null);// 创建具有指定缩放因子和偏移量的 RescaleOp对象 image = op.filter(image, null);// 对源图像中的数据进行逐像素重缩放,达到变暗的效果 repaint();// 重新绘制图像 } }); button_3.setText("变 暗");
14实现彩色图像变为灰色
(1)先创建一个BufferedImage对象,再在这个缓冲图像上绘制图片
同上;
(2)使用ColorSpace类和 ColorConvertOp类实现
ColorSpace:此类包含了可将指定颜色空间中的颜色与 sRGB 和定义良好的 CIEXYZ 颜色空间中的颜色进行相互转换的方法。
ColorConvertOp:此类对源图像中的数据执行逐像素的颜色转换。得到的颜色值可以扩展到目标图像的精度。颜色转换可以通过 ColorSpace 对象的数组或 ICC_Profile 对象的数组指定。
ColorSpace colorSpace1 = ColorSpace.getInstance(ColorSpace.CS_GRAY);// 创建内置线性为灰度的颜色空间 ColorSpace colorSpace2 = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);// 创建内置线性为 RGB的颜色空间 ColorConvertOp op = new ColorConvertOp(colorSpace1,colorSpace2, null);// 创建进行颜色转换的对象 image = op.filter(image, null);// 对缓冲图像进行颜色转换 repaint();// 重新绘制图像
15、使用像素生成图像
// 创建使用数组为Image生成像素值的ImageProducer对象 ImageProducer imageProducer = new MemoryImageSource(w, h, pix, 0, w); Image img = createImage(imageProducer);// 创建图像对象 g.drawImage(img, 0, 0,getWidth(),getHeight(), this);// 绘制图像
其中:MemoryImageSource(w, h, pix, 0, w);各个参数代表的意思:
w
- 像素矩形的宽度h
- 像素矩形的高度pix
- 一个像素数组0 - 数组中存储首个像素的偏移量w - 数组中一行像素到下一行像素之间的距离
16、立体效果的文字实现
先循环绘制灰色文本,在绘制一次黑色文本即可
g.setColor(Color.GRAY);// 设置颜色为灰色 int i = 0;// 循环变量 while (i<8){ g.drawString(value, x, y); // 绘制文本 x+=1;// 调整绘制点的横坐标值 y+=1;// 调整绘制点的纵坐标值 i++;// 调整循环变量的值 } g.setColor(Color.BLACK);// 设置颜色黑色 g.drawString(value, x, y); // 绘制文本
17、阴影效果的文字实现
先绘制灰色文本一次,再在其左下侧绘制一次黑色文本
g.setColor(Color.GRAY);// 设置颜色为灰色 g.drawString(value, x, y); // 绘制文本 x -= 3;// 调整绘制点的横坐标值 y -= 3;// 调整绘制点的纵坐标值 g.setColor(Color.BLACK);// 设置颜色黑色 g.drawString(value, x, y); // 绘制文本
相关推荐
这份名为“会计每日工作总结会计实习每日小结.zip”的压缩包文件包含了名为“会计每日工作总结会计实习每日小结.docx”的文档,很可能是对会计实习期间每日工作的详细记录和反思。 首先,我们要理解会计工作的重要...
网络教学检测好工具:“每日交作业”小程序使用说明.docx网络教学检测好工具:“每日交作业”小程序使用说明.docx网络教学检测好工具:“每日交作业”小程序使用说明.docx网络教学检测好工具:“每日交作业”小程序...
体育课课后小结是对课堂教学效果的反思与总结,它旨在深入分析教学过程中的优点与不足,以便于改进教学策略,提升教学质量。这两篇体育课课后小结中,我们可以提炼出以下几个重要的教学知识点和原则: 1. **新课标...
此Web部件从指定SP自定义列表或一个选定的 RSS源选择一个随机项目,并显示一张图片、标题和一个Tip。适用于WSS 3.0,MOSS 2007和SP2010.
不过,从【标题】和【描述】中可以看出,文件涉及的是“财务出纳个人精编工作小结”。以下将根据这个主题,详细展开相关知识点。 财务出纳工作是企业财务活动中的一项重要工作,其主要负责处理日常现金收支和银行...
【标题】"小程序下载必应每日图片"是一个基于Qt框架的桌面应用示例,它的主要功能是自动下载必应搜索引擎每日更新的特色图片,并将其设置为用户的桌面背景。这个小程序展示了如何利用Qt库来实现网络请求、图片下载...
【班主任带教小结】 在这四篇班主任带教小结中,我们可以提炼出以下几个关键的知识点: 1. **教育者品质的重要性**:优秀的班主任应当具备敬业、勤奋和强烈的责任感。例如,赵季萍老师在处理课代表未能及时发放...
"备份易源代码之每日每日工作备份"的标题和描述都强调了这一点,它着重于源代码的日常备份策略,旨在确保代码的安全性和项目的可恢复性。下面我们将详细探讨相关知识点。 1. **源代码备份**:源代码是软件开发的...
学校传染病防控自查小结.pdf 学校作为学生学习和生活的重要场所,其公共卫生安全直接关系到师生的身体健康和社会稳定。在当前全球公共卫生形势复杂多变的背景下,学校传染病的防控工作尤为重要。为此,本文将对学校...
周班级工作小结是对一周班级管理工作进行全面回顾和总结的重要文档,它旨在梳理过去一周的工作重点,分析存在的问题,以及规划未来的工作方向。通过这个过程,可以清晰地了解到班级在思想引导、家校合作、学生自主...
在这个名为“HelloCodeDev-master”的项目中,我们可以看到一个用于创建每日一句英语学习的微信小程序。这个小程序旨在帮助用户每天学习新的英语句子,提高他们的语言技能。通过这种方式,用户可以在日常生活中轻松...
通过对幼儿的指甲、手心、眼睛、口腔、咽部、淋巴结、耳廓、耳后的观察,保健医可以了解幼儿的整体卫生情况,从而更好地护理幼儿的健康。 (二)生活用品摆放情况 生活用品摆放情况也是保健医每日巡查表中的一个...
"每日更新微信小程序源码.zip"这个压缩包文件显然包含了一系列微信小程序的源代码,可能是为了帮助开发者学习、参考或者快速构建自己的小程序。 首先,我们要理解小程序源码的基本结构。一个微信小程序通常由以下几...
企查查企业信息爬虫 ,企查查app每日新增企业抓取,可以进行每日的增量抓取、企业数据、工商数据等等。 每天定时抓取 自动刷新token 省份、市的所有代码 token自动刷新 根据地址自动将省份、市、区县进行分割 所有...
【网站建设情况小结】 本文是对一个意大利经商处政府子网站的建设情况的总结,强调了在网站建设和管理中采取的有效策略和经验。以下为详细的知识点解析: 1. **领导重视**:领导的支持是网站成功的关键。从一开始...
【营销】领域的组训例会月度培训小结工作沟通主要涵盖了以下几个关键知识点: 1. **活动量管理工具**:这是营销团队管理中一个重要的工具,用于追踪和管理销售团队的工作进度和成果。通过活动量管理,可以了解销售...
每日构建是软件工程中一种重要的持续集成实践,旨在提高软件开发效率和质量。它通过自动化的方式,每天将项目的所有源代码编译成可执行的软件版本,确保代码的正确性和可部署性。每日构建的目的是尽早发现并修复问题...
【一年级班级工作小结】 在小学一年级的班级管理中,主要关注的是新生的适应性和行为规范的建立。新生初入小学,对学校的规则和要求往往不熟悉,表现为活泼好动,难以自我约束。因此,首要任务是帮助他们适应小学...
欢迎使用“每日记事”小工具 当前内容是首次使用简单说明,看完可直接删除。 您可以使用本程序进行每日的任务安排,并随时记录任务的完成情况。 例如: 今天的任务: 午睡 30m 做任务二 2h 任务三 3h 本周要做的: ...
【监理验槽小结知识】 监理验槽是建筑工程中一项重要的环节,主要目的是确保地基基础的质量,保证建筑物的安全稳定。以下是对监理验槽过程的详细解析: 1. **工程概况** - 工程项目特征包括项目名称、建设规模、...