了解切图前,需先了解OpenSeadragon前端插件库的原理,尤其是其自动识别文件夹及文件名的原理。链接如下:OpenSeadragon前端插件库认识
学习完之后继续往下走
先上主要代码:
for (int n=levelCount-1;n>-1;n--){//n表示层级,也表示需要创建的文件夹名字
int n= os.getLevelCount();//代表层级
int w = n+8; //w文件夹名
//创建目录
String dirName = "E:\\img_test\\img_256\\"+w+"\\";
getImage.createDir(dirName);
int nHeight = (int) (os.getLevel0Height()/os.getLevelHeight(n)); //切高的次数
int nWidth = (int) (os.getLevel0Width() / os.getLevelWidth(n)); //切长的次数
for (int j=0;j<nWidth;j++){ //循环切长
for (int i=0;i<nHeight;i++){ //循环切高
BufferedImage th = os.createThumbnailImage((int) (j*os.getLevelWidth(n)), (int) (i*os.getLevelHeight(n)), os.getLevelHeight(n),os.getLevelHeight(n), 256); //开始切图
fileName = dirName + j+"_"+i+".png"; //创建文件
getImage.createFile(fileName); //封装好的工具代码,此处没有贴出
getImage.cutImage(th,fileName); //封装好的工具代码,此处没有贴出
System.out.println("保存成功");
}
}
os.close();
}
思路:
主要是先从最大层级开始切图,以此类推,最终在第0层切图。切最大层级是,先从坐标(0,0)开始,每次切的像素块大小为对应层级的长或者宽(哪个大取哪个),用for循环第2次切从坐标(最大的长或者宽,最大的长或者宽)开始,而切的次数由0层级的长宽除以现在切图的对应层级得出,此最大层级切出来的图需放到创建出来的最大文件夹下。
切到最后,切第0层是,从坐标(0,0)开始,切的长度为0层级原图的长或宽(哪个长对应哪个),最后映射成像素256,也就是OpenSlide自带的方法createThumbnailImage里面的参数maxSize=256即可。
注意:一定要事先了解OpenSeadragon的自动识别切图的原理,尤其是其自动识别对应的文件夹名,以及图片命名。这很关键。
讲的很水,不懂可以私聊。