`
lwdillon
  • 浏览: 466 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

Swing——合成

    博客分类:
  • java
阅读更多

新手初学java GUI swing ,边学边记录所练习的程序,给自己一个动力,希望得高手指点

合成是客户端程序员非常重要的工具。可以把合成看作是决定如何把一个制图基元的颜色存储或组合到目标的规则,例如,规定只能把制图基元的蓝色分量复制到图形区域。合成也被认为像Photoshop这样的图形编辑应用程序中的混合模式,在这些应用程序中它们通常用于创建复杂的灯光效果。在java中,Composite是java.awt.Composite接口的一个实例,可以通过调用setComposite()把它设置到一个Graphics2D上。

java只有一个名为java.awt.AlphaComposite的Composite的实现。这个独特的合成实现了基本的透明合成规则以获得半透明的效果。AlphaComposite实现了12个规则。所有的规则基于一些数学等式:定义特定源(正在绘制的基元)和目的地(图形区域)的最终像素的alpha分量和颜色的值。这个java实现引入了一个额外的参数,一个用于在混合之前修改修改源的不透明性的alpa值。

要决定什么时候使用使用什么规则,理解java.awt.AlphaComposite文档中提到的porterDuff等式很重要,就最有用也是java默认的规则之一的“Source Over(源覆盖)”来说,它在目标图像之上合成源,源好像是覆盖在目标图像上的一片玻璃上的一个半透明图画。这个规则的描述等式如下:

Ar=As+Ad*(1-As)

Cr=Cs+Cd*(1-As)

因子A代表这个像素的alpha通道,C代表这个像素的每个颜色分量,下标r、s、d分别代表这个像素的结果(result)、源(sorce)和目的地(destination)。放在一起意味着As代表源的alpha通道,Ad代表已经在图形区域上的像素的alpha通道上,这两个值用于计算最终的alpha通道Ar。这个等式中的所有的值都是在0.0和1.0之间的浮点数,计算结果也位于这个范围。

下面来看各个规划的等式和效果图:

1.CLear

Ar=0

Cr=0

目的地的颜色和alpha都被清除掉。无论用什么颜色或形状来绘制,被源覆盖的每个目的地的像素都会消失。

如图1所示:

图1 CLear规的演示

2.Dst

Ar=Ad

Cr=Cd

目的地保持不变。在目的地上绘制的任何东西都会被丢弃,如图2所示

图2 Dst规则的演示

3.DstAtop

Ar=As*(1-Ad)+Ad*As=As

Cr=Cs*(1-Ad)+Cd*As

位于源内部的那部分目的地与源组合并取代目的地。这导致目的地似乎绘制在源之上如图3所示:

后面几种就不一一介绍了,有兴趣的看看代码就可以了。不说了,上源码!

图3 用DstAtop规则的演示

<!--EndFragment-->
分享到:
评论

相关推荐

    java swing 毛玻璃实现

    本教程将专注于一个特定的主题——"毛玻璃效果"(也称为模糊背景或亚克力效果)在Java Swing中的实现。 毛玻璃效果是一种设计趋势,它在界面上创建半透明、模糊的背景,以突出显示前景元素。在Java Swing中,我们...

    2048小游戏,Java,Swing.zip

    《2048小游戏——Java Swing开发详解》 2048是一款广受欢迎的数字合成游戏,玩家通过上下左右滑动屏幕,使数字方块合并,目标是达到2048这个数字。这款游戏的实现原理并不复杂,但却能很好地锻炼编程思维和逻辑处理...

    Java面试宝典基础篇1——设计模式和分布式事务.pdf

    观察者模式在Swing事件监听中应用广泛;装饰器模式则用于Java I/O类中。 关于设计模式的理解和应用,应聘者需要回答设计模式是什么,并举例说明在代码中使用过的模式。例如,工厂模式的主要好处是它在对象创建时...

    JamSesh:自由式音乐背景伴奏的实时合成

    《JamSesh:自由式音乐背景伴奏的实时合成——基于Java技术的创新实践》 在数字音乐领域,创新技术正不断推动着音乐创作的新边界。"JamSesh"项目,以其独特的“自由式音乐背景伴奏的实时合成”功能,为音乐爱好者...

    Java 对对碰

    在本项目"Java 对对碰"中,我们探讨的是如何使用Java编程语言来构建一个图形用户界面(GUI)游戏——对对碰。对对碰是一款广受欢迎的休闲游戏,玩家需要通过消除相同图案的方块来得分。在这个Java实现的版本中,特别...

    行业文档-设计装置-变压吸附提取一氧化碳装置.zip

    为了高效地提取和利用这种气体,工程师们设计了特殊的装置——变压吸附(Pressure Swing Adsorption, PSA)提取一氧化碳装置。这种技术以其高效、环保和经济性受到了业界的青睐。 一、变压吸附原理 变压吸附是基于...

    Java开发技术大全 电子版

    7.5.2RandomAccessFile类使用示例——文件加密256 7.6控制台输入和输出257 7.6.1控制台输入类Scanner257 7.6.2格式化输出printf258 7.7序列化261 7.8本章小结264 第4篇Java中的高级技术 第8章Java的多线程...

    图片水印小Demo同大家分享

    标题“图片水印小Demo同大家分享”暗示我们将讨论一个简易的图片水印应用示例,而描述则进一步提到了这个Demo的主要功能——将一个图片与另一个图片合成,让白色部分变得透明,同时规定了图像的宽度和颜色格式。...

    java小应用程序(applet)

    在本例中,我们讨论的是一个特定的Java Applet——钢琴应用。这个应用可能是用Java编写的一个图形化界面,模拟了钢琴键盘,用户可以通过点击屏幕上的键来播放音符,体验如同真实钢琴一样的音乐创作。这样的程序通常...

    RGB.rar_rgb

    RGB图像三通道分离算法是将一个RGB图像分解为三个单独的通道——红色、绿色和蓝色通道的过程。这个过程在图像编辑、分析和特效制作中非常常见。通过分离通道,我们可以对每个颜色通道进行独立的操作,例如调整亮度、...

    2048小游戏源码(java).rar

    2048游戏的核心规则是:玩家通过上、下、左、右滑动屏幕,使数字方块进行合并,每次操作后,棋盘上会随机出现一个2或4,目标是合成最大的数字——2048。在Java中,这一过程通常通过二维数组来模拟棋盘,每个元素代表...

    2048小游戏图片,请解压到与java代码同文件包下,方可执行代码

    2048是一款基于数字合并的益智游戏,玩家通过上下左右移动数字方块,当两个相同的数字相遇时会合并成它们的和,目标是合成最大的数字——2048。这里提供的压缩包包含了游戏所需的图片资源。 1. **Java编程基础**:...

    java 教程txt

    面向对象编程是一种编程范式,它将数据和操作数据的方法绑定在一起,形成一个整体——即对象。 **1.1 什么是对象** - **定义**: 对象是现实世界中的事物或概念在计算机程序中的抽象表示。 - **组成**: 每个对象都...

    java 影碟出租管理系统

    本系统——"Java 影碟出租管理系统",便是利用Java技术和数据库管理系统Access相结合,实现了一个简单而实用的信息管理平台。本文将深入探讨该系统的构建思路、技术选型以及核心功能。 首先,让我们了解一下系统的...

    java应用软件程序设计

    37 实例16 使用进度条 39 实例17 使用工具提示 42 实例18 不同界面的风格 43 第2章 Java的二维和三维图形处理 45 实例19 颜色处理 46 实例20 合成效果 47 实例21 多种字体效果 49 实例22 ...

    SimplestTranslators

    《简易翻译器——基于百度翻译API的Java应用详解》 在信息技术日新月异的今天,语言翻译软件已经成为人们日常生活中不可或缺的一部分。标题为“SimplestTranslators”的项目,正是一个利用百度翻译API开发的简易...

    超爽的自学课件(java)

    我们最后介绍的是Java 1.2的“Swing”库——它使Java的UI组件得到了显著的改善。 &lt;br&gt;(14) 第14章:多线程 Java提供了一套内建的机制,可提供对多个并发子任务的支持,我们称其为“线程”。这线程均在单一的...

    fightMTXX:包含大量图像滤镜的Android应用

    在Java中,我们可以利用Java AWT(Abstract Window Toolkit)和Swing库中的Image类进行基本的图像操作,如读取、显示和保存图片。然而,对于复杂的滤镜效果,如模糊、锐化、色彩调整等,我们通常会使用Java的OpenCV...

    JAVA上百实例源码以及开源项目源代码

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

Global site tag (gtag.js) - Google Analytics