java清除地图道路信息

来源:互联网 发布:ctos 软件 编辑:程序博客网 时间:2024/05/23 19:28


在实际web项目中,有些时候需要使用到离线地图,有些时候需要清除地图上的某些不需要的地理信息,比如道路,因为在实际使用时需要在地图上画线,这些线的颜色会和地图的道路颜色冲突,导致界面很乱。

         但是下载的离线地图又没有清除道路的功能,只能手动清除了。

         使用java分析地图图片,找到道路颜色,把道路颜色替换成地图的颜色,,,我这里只是把道路的颜色弄淡即可,,分析一下流程,首先我使用颜色拾取器在地图上找到道路的颜色,因为道路的颜色有深有浅,所以道路的颜色是一个范围,通过颜色拾取器找到很多适合的点,把红绿蓝算一个平均值,并且算出三原色的相对偏移量,只有当程序获取到的颜色值介于平均值的相对偏移量之间才会替换。

        替换前的图片:


替换后的效果:



 关键代码如下:

 

Java代码 
  1. BufferedImage bi = ImageIO.read(a);  
  2.          
  3.        for (int i = 0; i < bi.getWidth(); i++) {  
  4.            for (int j = 0; j < bi.getHeight(); j++) {  
  5.             Color biColor = ImageUtil.parseColor(bi.getRGB(i, j));  
  6.             for(ColorDemo demo: colorDemos){  
  7.                 //计算两个颜色的红绿蓝的偏移量  
  8.                 int rOffset = Math.abs(biColor.getRed() - demo.getColor().getRed());  
  9.                 int gOffset = Math.abs(biColor.getGreen() - demo.getColor().getGreen());  
  10.                 int bOffset = Math.abs(biColor.getBlue() - demo.getColor().getBlue());  
  11.                    //判断偏移量与道路颜色范围内的偏移量是否匹配  
  12.                 if(rOffset <= demo.getRedOffset() && gOffset <= demo.getGreenOffset() && bOffset <= demo.getBlueOffset()){  
  13.                         // System.out.println(i+","+j+"  from:"+srcColor.getRGB()+"to"+targetColor.getRGB());  
  14.                          bi.setRGB(i, j, targetColor.getRGB());  
  15.                          break;  
  16.                    }  
  17.             }  
  18.               
  19.            }  
  20.        }  

该转换工具的源码在我ITEye博客中有下载,地址:http://huiyanlihao.iteye.com/blog/2302984 

我在ITEye的博客,http://huiyanlihao.iteye.com/,欢迎大家踩踩,,,


0 0