现在博客上面看到的都是opencv的,opencv还要安装它的组件库太麻烦,linux环境还好,如果上镜像环境,安装是个大麻烦。所以改造成去掉opencv的。
全景图切成六个面
private BufferedImage sideCubeMapImage(int width,int height,int type, int sideId, int sideWidth, int sideHeight,String saveUrl, int[] rgbArray) {
log.error("==========handle " + sideId + " start ===========");
double[][] imageTransform =
{
{0, 0},
{Math.PI / 2, 0},
{Math.PI, 0},
{-Math.PI / 2, 0},
{0, -Math.PI / 2},
{0, Math.PI / 2}
};
// 新的图片坐标点与原始图片坐标的映射关系
double[][] mapx = new double[sideHeight][sideWidth];
double[][] mapy = new double[sideHeight][sideWidth];
//计算相邻ak和相反an的三角形张成球体中心
final double an = Math.sin(Math.PI / 4);
final double ak = Math.cos(Math.PI / 4);
double ftu = imageTransform[sideId][0];
double ftv = imageTransform[sideId][1];
//对于每个像素点计算相应的源坐标,具体计算公式参考球面转立方体映射
for (int y = 0; y < sideHeight; y++) {
for (int x = 0; x < sideWidth; x++) {
//将坐标映射在平面上
float nx = (float) y / (float) sideHeight - 0.5f;
float ny = (float) x / (float) sideWidth - 0.5f;
nx *= 2;
ny *= 2;
nx *= an;
ny *= an;
double u, v;