`

Java清除地图道路等标记

 
阅读更多

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

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

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

        替换前的图片:


替换后的效果:



 关键代码如下:

 

 BufferedImage bi = ImageIO.read(a);
        
        for (int i = 0; i < bi.getWidth(); i++) {
            for (int j = 0; j < bi.getHeight(); j++) {
            	Color biColor = ImageUtil.parseColor(bi.getRGB(i, j));
            	for(ColorDemo demo: colorDemos){
            		//计算两个颜色的红绿蓝的偏移量
            		int rOffset = Math.abs(biColor.getRed() - demo.getColor().getRed());
                	int gOffset = Math.abs(biColor.getGreen() - demo.getColor().getGreen());
                	int bOffset = Math.abs(biColor.getBlue() - demo.getColor().getBlue());
                    //判断偏移量与道路颜色范围内的偏移量是否匹配
                	if(rOffset <= demo.getRedOffset() && gOffset <= demo.getGreenOffset() && bOffset <= demo.getBlueOffset()){
                         // System.out.println(i+","+j+"  from:"+srcColor.getRGB()+"to"+targetColor.getRGB());
                          bi.setRGB(i, j, targetColor.getRGB());
                          break;
                    }
            	}
            	
            }
        }

 附件是该项目源码,,分享一下。。。。。

 

  • 大小: 277.3 KB
  • 大小: 238.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics