手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏04图像资源的透明处理

简介: 手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏04图像资源的透明处理

项目源码


项目源码


新增资源文件


image.png


新增Image图像处理类


新增sprite包,里面新增Image.java类

package sprite;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class Image {
    private BufferedImage _img;
    private int _width;
    private int _height;
    public Image(String path){
        try {
            _img = ImageIO.read(getClass().getClassLoader().getResourceAsStream(path));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        _width = _img.getWidth(null);
        _height = _img.getHeight(null);
        _img = makeTransparent(_img);
    }
    private BufferedImage makeTransparent(BufferedImage tmpImage)
    {
        int h=tmpImage.getHeight(null);
        int w=tmpImage.getWidth(null);
        BufferedImage resultImage=new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
        // assume the upperleft corner of the original image is a transparent pixel
        Color trans = new Color(255,0,255);
        Color transOther = new Color(252,0,255);
        int transparentColor=trans.getRGB();
        int transparentColorOther=transOther.getRGB();
        for (int y=0;y<h;y++)
          for (int x=0;x<w;x++)
          {
            int color=tmpImage.getRGB(x,y);
            if (color==transparentColor) color=color & 0x00FFFFFF; // clear the alpha flag
            else if(color==transparentColorOther) color=color & 0x00FFFFFF;
            resultImage.setRGB(x,y,color);
          }
        return resultImage;
    }
    public BufferedImage getImage(){
        return _img;
    }
}

图片的透明处理

makeTransparent方法:


image.png

1640594977(1).png

遍历图像的每一个像素,通过以下代码清除图片中颜色为上图的2种粉色(我们的资源有2种粉色)

color=color & 0x00FFFFFF;

这样处理之后,原图


image.png


01.png


就变成了透明的。


GameApp的改变


image.png

1640595269(1).png


本节最终效果


image.png

目录
相关文章
|
5天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
33 3
|
1天前
|
人工智能 安全 Java
Java8 - LocalDateTime时间日期类使用详解
Java8 - LocalDateTime时间日期类使用详解
|
2天前
|
安全 Java 程序员
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
3天前
|
Java
Java Class类
Java Class类
8 0
|
3天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
21 0
|
1天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
2天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
6 0
|
2天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程