Image fgImage
try {
bgImage = ImageIO.read(bgImageFile)
fgImage = ImageIO.read(fgImageFile)
int bgWidth = bgImage.getWidth(null)
int bgHeight = bgImage.getHeight(null)
int fgWidth = fgImage.getWidth(null)
int fgHeight = fgImage.getHeight(null)
// 此类叫SpliceImages,这个方法是静态方法,所以实例化慎桐庆一下
// 后面的这个对象的属性是自定义的类成员。
SpliceImages spliceImages = new SpliceImages()
// 私有方法
spliceImages.parsePosition(position, bgWidth, bgHeight, fgWidth, fgHeight)
// 生成新图片的长、宽,后面那个是色彩模式
BufferedImage bufferedImage = new BufferedImage(spliceImages.WIDTH, spliceImages.HEIGHT, BufferedImage.TYPE_INT_RGB)
Graphics graphics = bufferedImage.createGraphics()
// 绘制背景图片
graphics.drawImage(bgImage, spliceImages.bgX, spliceImages.bgY, null)
// 绘制前景图片
graphics.drawImage(fgImage, spliceImages.fgX, spliceImages.fgY, null)
graphics.dispose()
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(output)
encoder.encode(bufferedImage)
output.close()
} catch (IOException e) {
e.printStackTrace()
}
这个是我做图表时写的,整个类中定义了很多重载方法,所以不全贴了。由于用的FusionCharts3.1,单系列图表没有图例,为了处理导出图片,就自制图例,然后用java拼接。其中那个私有方法是我处理两张图片的左上角坐轮枝标的。这里就不贴了。实际上我的做法就是取出两个图片,然后重新绘制。做法比较笨,希望抛砖引玉宽握吧。同理,图片覆盖也是用这个,只是两图片的坐标发生变发。
package loveimport java.awt.*
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.util.Random
import javax.swing.*
public class Games extends JFrame implements ActionListener {
private JButton buttons[][]// 存储按键的数组
private Container container// 一个容器
private GridLayout layout// 布局方式为GridLayout
private int count = 0, is[] = new int[8]// count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组
public Games() {
super("拼图游戏")// 设置标题
layout = new GridLayout(3, 3)// 3行3列
container = getContentPane()// 该容器的布局方式,及其重要,否则产生空引用异常
container.setLayout(layout)// 将该布局方式作用于容器
buttons = new JButton[3][3]// 给按键数组分谨做配储存空间
int locate1, locate2// locate1用来指示当前产生的元素 locate2用来指示locate1之前的元素
for (locate1 = 0locate1 <8locate1++) {// 该方法作用是产生1到8这8个数,随机分配给数组,即无序排列
int g = new Random().nextInt(8) + 1// 随机产生一个空白按键,即不显示的那个
is[locate1] = g
for (locate2 = locate1 - 10 <= locate2locate2--) {
if (is[locate1] == is[locate2])
break
}
if (locate2 != -1)
locate1--
}
int temp = 0
int r = new Random().nextInt(3)// 随机产生一个0到3的数,代表空白按键的行
int l = new Random().nextInt(3)// 随机产生祥态衡一个0到3的数,代表空白按键的列
for (int i = 0i <3i++) {
for (int j = 0j <3j++) {
if (r == i &&l == j) {// 空白按键设置为9,不显示
buttons[i][j] = new JButton("9")
container.add(buttons[i][j])
buttons[i][j].setVisible(false)
} else {
buttons[i][j] = new JButton("" + is[temp++])// 将数组数组的值作为显示的8个按键的名字
container.add(buttons[i][j])
}
buttons[i][j].addActionListener(this)// 注册监听事件
}
}
setSize(300, 300)// 设置显示容器区域闭慧大小
setVisible(true)
}
public void actionPerformed(ActionEvent event) {// 事件处理,由于计算量小该处将所有按键单独分析
JButton b = (JButton) event.getSource()
if (b == buttons[0][0]) {
if (buttons[0][1].getText().equals("9")) {
buttons[0][1].setText("" + buttons[0][0].getText())
buttons[0][1].setVisible(true)
buttons[0][0].setText("9")
buttons[0][0].setVisible(false)
count++
} else if (buttons[1][0].getText().equals("9")) {
buttons[1][0].setText("" + buttons[0][0].getText())
buttons[1][0].setVisible(true)
buttons[0][0].setText("9")
buttons[0][0].setVisible(false)
count++
}
}
else if (b == buttons[0][1]) {
if (buttons[0][0].getText().equals("9")) {
buttons[0][0].setText("" + buttons[0][1].getText())
buttons[0][0].setVisible(true)
buttons[0][1].setText("9")
buttons[0][1].setVisible(false)
count++
} else if (buttons[0][2].getText().equals("9")) {
buttons[0][2].setText("" + buttons[0][1].getText())
buttons[0][2].setVisible(true)
buttons[0][1].setText("9")
buttons[0][1].setVisible(false)
count++
} else if (buttons[1][1].getText().equals("9")) {
buttons[1][1].setText("" + buttons[0][1].getText())
buttons[1][1].setVisible(true)
buttons[0][1].setText("9")
buttons[0][1].setVisible(false)
count++
}
} else if (b == buttons[0][2]) {
if (buttons[0][1].getText().equals("9")) {
buttons[0][1].setText("" + buttons[0][2].getText())
buttons[0][1].setVisible(true)
buttons[0][2].setText("9")
buttons[0][2].setVisible(false)
count++
} else if (buttons[1][2].getText().equals("9")) {
buttons[1][2].setText("" + buttons[0][2].getText())
buttons[1][2].setVisible(true)
buttons[0][2].setText("9")
buttons[0][2].setVisible(false)
count++
}
} else if (b == buttons[1][0]) {
if (buttons[0][0].getText().equals("9")) {
buttons[0][0].setText("" + buttons[1][0].getText())
buttons[0][0].setVisible(true)
buttons[1][0].setText("9")
buttons[1][0].setVisible(false)
count++
} else if (buttons[1][1].getText().equals("9")) {
buttons[1][1].setText("" + buttons[1][0].getText())
buttons[1][1].setVisible(true)
buttons[1][0].setText("9")
buttons[1][0].setVisible(false)
count++
} else if (buttons[2][0].getText().equals("9")) {
buttons[2][0].setText("" + buttons[1][0].getText())
buttons[2][0].setVisible(true)
buttons[1][0].setText("9")
buttons[1][0].setVisible(false)
count++
}
} else if (b == buttons[1][1]) {
if (buttons[0][1].getText().equals("9")) {
buttons[0][1].setText("" + buttons[1][1].getText())
buttons[0][1].setVisible(true)
buttons[1][1].setText("9")
buttons[1][1].setVisible(false)
count++
} else if (buttons[1][0].getText().equals("9")) {
buttons[1][0].setText("" + buttons[1][1].getText())
buttons[1][0].setVisible(true)
buttons[1][1].setText("9")
buttons[1][1].setVisible(false)
count++
} else if (buttons[1][2].getText().equals("9")) {
buttons[1][2].setText("" + buttons[1][1].getText())
buttons[1][2].setVisible(true)
buttons[1][1].setText("9")
buttons[1][1].setVisible(false)
count++
} else if (buttons[2][1].getText().equals("9")) {
buttons[2][1].setText("" + buttons[1][1].getText())
buttons[2][1].setVisible(true)
buttons[1][1].setText("9")
buttons[1][1].setVisible(false)
count++
}
} else if (b == buttons[1][2]) {
if (buttons[0][2].getText().equals("9")) {
buttons[0][2].setText("" + buttons[1][2].getText())
buttons[0][2].setVisible(true)
buttons[1][2].setText("9")
buttons[1][2].setVisible(false)
count++
} else if (buttons[2][2].getText().equals("9")) {
buttons[2][2].setText("" + buttons[1][2].getText())
buttons[2][2].setVisible(true)
buttons[1][2].setText("9")
buttons[1][2].setVisible(false)
count++
} else if (buttons[1][1].getText().equals("9")) {
buttons[1][1].setText("" + buttons[1][2].getText())
buttons[1][1].setVisible(true)
buttons[1][2].setText("9")
buttons[1][2].setVisible(false)
count++
}
} else if (b == buttons[2][0]) {
if (buttons[1][0].getText().equals("9")) {
buttons[1][0].setText("" + buttons[2][0].getText())
buttons[1][0].setVisible(true)
buttons[2][0].setText("9")
buttons[2][0].setVisible(false)
count++
} else if (buttons[2][1].getText().equals("9")) {
buttons[2][1].setText("" + buttons[2][0].getText())
buttons[2][1].setVisible(true)
buttons[2][0].setText("9")
buttons[2][0].setVisible(false)
count++
}
}
else if (b == buttons[2][1]) {
if (buttons[2][0].getText().equals("9")) {
buttons[2][0].setText("" + buttons[2][1].getText())
buttons[2][0].setVisible(true)
buttons[2][1].setText("9")
buttons[2][1].setVisible(false)
count++
} else if (buttons[2][2].getText().equals("9")) {
buttons[2][2].setText("" + buttons[2][1].getText())
buttons[2][2].setVisible(true)
buttons[2][1].setText("9")
buttons[2][1].setVisible(false)
count++
} else if (buttons[1][1].getText().equals("9")) {
buttons[1][1].setText("" + buttons[2][1].getText())
buttons[1][1].setVisible(true)
buttons[2][1].setText("9")
buttons[2][1].setVisible(false)
count++
}
} else if (b == buttons[2][2]) {
if (buttons[2][1].getText().equals("9")) {
buttons[2][1].setText("" + buttons[2][2].getText())
buttons[2][1].setVisible(true)
buttons[2][2].setText("9")
buttons[2][2].setVisible(false)
count++
} else if (buttons[1][2].getText().equals("9")) {
buttons[1][2].setText("" + buttons[2][2].getText())
buttons[1][2].setVisible(true)
buttons[2][2].setText("9")
buttons[2][2].setVisible(false)
count++
}
}
if (buttons[0][0].getText().equals("1")// 假如1到8已经排列完成,则执行该语句
&&buttons[0][1].getText().equals("2")
&&buttons[0][2].getText().equals("3")
&&buttons[1][0].getText().equals("4")
&&buttons[1][1].getText().equals("5")
&&buttons[1][2].getText().equals("6")
&&buttons[2][0].getText().equals("7")
&&buttons[2][1].getText().equals("8")) {
JOptionPane.showMessageDialog(null, "您一共花费了" + count + "步完成了游戏!")// d出对话框,显示共移动步数
System.exit(0)// 退出程序
}
}
public static void main(String[] args) {
Games game = new Games()
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
}
这是以段绘制水印的程序还有察族透明效果 水印上去的就是一张图片 你应该看的懂/**
* @see 绘制水印
* @param base 根目录
* @param file 图塌局片文件
* @param image 图片源
* @param width 图片宽度
* @param height 图片高度
* */
private boolean printWater(String base, File file, BufferedImage image, int width, int height){
String fileName = file.getName()
String extend = fileName.substring(fileName.lastIndexOf(".") + 1)
//如果图片不是gif类型,并且图片小于1M就加水印
if(!"gif".toLowerCase().equals(extend) &&file.length() <= 1024 * 1024){
try {
String waterImgPath = UtilityPropKit.getProp("waterImgPath")
BufferedImage water = ImageIO.read(new File(base + waterImgPath)) //水印
// 水印长度
int waWidth = water.getWidth()
// 水印高度
int waHeight = water.getHeight()
if(height >waHeight * 2 &&width >waWidth * 2){
//根据源图片尺寸,产生目标图片
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)
//获取Graphics2D
Graphics2D graph = img.createGraphics()
//绘制源图
graph.drawImage(image, 0, 0, width, height, null)
//团没让在已经绘制的图片中加入透明度通道
graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f))
//绘制水印
graph.drawImage(water, 0, height-waHeight, waWidth, waHeight, null)
//释放对象
graph.dispose()
//保存文件
ImageIO.write(img, extend, file)
}
return true
} catch (Exception e) {
e.printStackTrace()
}
}
return false
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)