static int getMaxElemSizeBandDataType(final Band[] bands) { int maxSignedIntType = -1; int maxUnsignedIntType = -1; int maxFloatType = -1; for (Band band : bands) { int dt = band.getDataType(); if (ProductData.isIntType(dt)) { if (ProductData.isUIntType(dt)) { maxUnsignedIntType = Math.max(maxUnsignedIntType, dt); } else { maxSignedIntType = Math.max(maxSignedIntType, dt); } } if (ProductData.isFloatingPointType(dt)) { maxFloatType = Math.max(maxFloatType, dt); } } if (maxFloatType != -1) { if (maxUnsignedIntType == ProductData.TYPE_UINT32 || maxSignedIntType == ProductData.TYPE_INT32) { return ProductData.TYPE_FLOAT64; } else { return maxFloatType; } } if (maxUnsignedIntType != -1) { if (maxSignedIntType == -1) { return maxUnsignedIntType; } if (ProductData.getElemSize(maxUnsignedIntType) >= ProductData.getElemSize(maxSignedIntType)) { int returnType = maxUnsignedIntType - 10 + 1; if (returnType > 12) { return ProductData.TYPE_FLOAT64; } else { return returnType; } } } if (maxSignedIntType != -1) { return maxSignedIntType; } return DataBuffer.TYPE_UNDEFINED; }