131 lines
4.2 KiB
Java
131 lines
4.2 KiB
Java
/* ====================================================================
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==================================================================== */
|
|
package org.apache.poi.util;
|
|
|
|
/**
|
|
* @author Yegor Kozlov
|
|
*/
|
|
public class Units {
|
|
/**
|
|
* In Escher absolute distances are specified in
|
|
* English Metric Units (EMUs), occasionally referred to as A units;
|
|
* there are 360000 EMUs per centimeter, 914400 EMUs per inch, 12700 EMUs per point.
|
|
*/
|
|
public static final int EMU_PER_PIXEL = 9525;
|
|
public static final int EMU_PER_POINT = 12700;
|
|
public static final int EMU_PER_CENTIMETER = 360000;
|
|
|
|
/**
|
|
* Master DPI (576 pixels per inch).
|
|
* Used by the reference coordinate system in PowerPoint (HSLF)
|
|
*/
|
|
public static final int MASTER_DPI = 576;
|
|
|
|
/**
|
|
* Pixels DPI (96 pixels per inch)
|
|
*/
|
|
public static final int PIXEL_DPI = 96;
|
|
|
|
/**
|
|
* Points DPI (72 pixels per inch)
|
|
*/
|
|
public static final int POINT_DPI = 72;
|
|
|
|
/**
|
|
* Converts points to EMUs
|
|
* @param points points
|
|
* @return EMUs
|
|
*/
|
|
public static int toEMU(double points){
|
|
return (int)Math.rint(EMU_PER_POINT*points);
|
|
}
|
|
|
|
/**
|
|
* Converts pixels to EMUs
|
|
* @param pixels pixels
|
|
* @return EMUs
|
|
*/
|
|
public static int pixelToEMU(int pixels) {
|
|
return pixels*EMU_PER_PIXEL;
|
|
}
|
|
|
|
/**
|
|
* Converts EMUs to points
|
|
* @param emu emu
|
|
* @return points
|
|
*/
|
|
public static double toPoints(long emu){
|
|
return (double)emu/EMU_PER_POINT;
|
|
}
|
|
|
|
/**
|
|
* Converts a value of type FixedPoint to a floating point
|
|
*
|
|
* @param fixedPoint value in fixed point notation
|
|
* @return floating point (double)
|
|
*
|
|
* @see <a href="http://msdn.microsoft.com/en-us/library/dd910765(v=office.12).aspx">[MS-OSHARED] - 2.2.1.6 FixedPoint</a>
|
|
*/
|
|
public static double fixedPointToDouble(int fixedPoint) {
|
|
int i = (fixedPoint >> 16);
|
|
int f = fixedPoint & 0xFFFF;
|
|
return (i + f/65536d);
|
|
}
|
|
|
|
/**
|
|
* Converts a value of type floating point to a FixedPoint
|
|
*
|
|
* @param floatPoint value in floating point notation
|
|
* @return fixedPoint value in fixed points notation
|
|
*
|
|
* @see <a href="http://msdn.microsoft.com/en-us/library/dd910765(v=office.12).aspx">[MS-OSHARED] - 2.2.1.6 FixedPoint</a>
|
|
*/
|
|
public static int doubleToFixedPoint(double floatPoint) {
|
|
double fractionalPart = floatPoint % 1d;
|
|
double integralPart = floatPoint - fractionalPart;
|
|
int i = (int)Math.floor(integralPart);
|
|
int f = (int)Math.rint(fractionalPart*65536d);
|
|
return (i << 16) | (f & 0xFFFF);
|
|
}
|
|
|
|
public static double masterToPoints(int masterDPI) {
|
|
double points = masterDPI;
|
|
points *= POINT_DPI;
|
|
points /= MASTER_DPI;
|
|
return points;
|
|
}
|
|
|
|
public static int pointsToMaster(double points) {
|
|
points *= MASTER_DPI;
|
|
points /= POINT_DPI;
|
|
return (int)Math.rint(points);
|
|
}
|
|
|
|
public static int pointsToPixel(double points) {
|
|
points *= PIXEL_DPI;
|
|
points /= POINT_DPI;
|
|
return (int)Math.rint(points);
|
|
}
|
|
|
|
public static double pixelToPoints(int pixel) {
|
|
double points = pixel;
|
|
points *= POINT_DPI;
|
|
points /= PIXEL_DPI;
|
|
return points;
|
|
}
|
|
}
|