/*
 * 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.
 */

/* $Id: ImageSize.java 696968 2008-09-19 07:52:04Z jeremias $ */

package org.apache.xmlgraphics.image.loader;

import java.awt.Dimension;
import java.awt.geom.Dimension2D;

import org.apache.xmlgraphics.java2d.Dimension2DDouble;
import org.apache.xmlgraphics.util.UnitConv;

Encapsulates the size of an image.
/** * Encapsulates the size of an image. */
public class ImageSize { private int widthPx; private int heightPx; private int widthMpt; private int heightMpt; private int baselinePositionFromBottomMpt; private double dpiHorizontal; private double dpiVertical;
Constructor.
Params:
  • widthPx – the width of the image in pixels
  • heightPx – the height of the image in pixels
  • dpiHorizontal – the horizontal resolution in dots per inch
  • dpiVertical – the vertical resolution in dots per inch
/** * Constructor. * @param widthPx the width of the image in pixels * @param heightPx the height of the image in pixels * @param dpiHorizontal the horizontal resolution in dots per inch * @param dpiVertical the vertical resolution in dots per inch */
public ImageSize(int widthPx, int heightPx, double dpiHorizontal, double dpiVertical) { setSizeInPixels(widthPx, heightPx); setResolution(dpiHorizontal, dpiVertical); }
Constructor.
Params:
  • widthPx – the width of the image in pixels
  • heightPx – the height of the image in pixels
  • dpi – the resolution in dots per inch
/** * Constructor. * @param widthPx the width of the image in pixels * @param heightPx the height of the image in pixels * @param dpi the resolution in dots per inch */
public ImageSize(int widthPx, int heightPx, double dpi) { this(widthPx, heightPx, dpi, dpi); }
Default Constructor.
/** * Default Constructor. */
public ImageSize() { //nop }
Sets the image's size in pixels.
Params:
  • width – the width in pixels
  • height – the height in pixels
/** * Sets the image's size in pixels. * @param width the width in pixels * @param height the height in pixels */
public void setSizeInPixels(int width, int height) { this.widthPx = width; this.heightPx = height; }
Sets the image's size in millipoints.
Params:
  • width – the width in millipoints
  • height – the height in millipoints
/** * Sets the image's size in millipoints. * @param width the width in millipoints * @param height the height in millipoints */
public void setSizeInMillipoints(int width, int height) { this.widthMpt = width; this.heightMpt = height; }
Sets the image's resolution for interpreting the pixel size.
Params:
  • horizontal – the horizontal resolution in dpi
  • vertical – the vertical resolution in dpi
/** * Sets the image's resolution for interpreting the pixel size. * @param horizontal the horizontal resolution in dpi * @param vertical the vertical resolution in dpi */
public void setResolution(double horizontal, double vertical) { this.dpiHorizontal = horizontal; this.dpiVertical = vertical; }
Sets the image's resolution for interpreting the pixel size.
Params:
  • resolution – the resolution in dpi
/** * Sets the image's resolution for interpreting the pixel size. * @param resolution the resolution in dpi */
public void setResolution(double resolution) { setResolution(resolution, resolution); }
Sets the vertical position of the baseline of the image relative to the bottom of the image. The default is 0mpt (i.e. the image is bottom-aligned). This is used for MathML images, for example, which have a baseline. Using the value the images can be properly aligned with other text. Most other image don't have an implicit baseline.
Params:
  • distance – the distance from the bottom of the image in millipoints
/** * Sets the vertical position of the baseline of the image relative to the bottom of the image. * The default is 0mpt (i.e. the image is bottom-aligned). This is used for MathML images, for * example, which have a baseline. Using the value the images can be properly aligned with * other text. Most other image don't have an implicit baseline. * @param distance the distance from the bottom of the image in millipoints */
public void setBaselinePositionFromBottom(int distance) { this.baselinePositionFromBottomMpt = distance; }
Returns the vertical position of the baseline of the image relative to the bottom of the image. The default is 0mpt (i.e. the image is bottom-aligned). This is used for MathML images, for example, which have a baseline. Using the value the images can be properly aligned with other text. Most other image don't have an implicit baseline.
Returns:the distance from the bottom of the image in millipoints
/** * Returns the vertical position of the baseline of the image relative to the bottom of the * image. The default is 0mpt (i.e. the image is bottom-aligned). This is used for MathML * images, for example, which have a baseline. Using the value the images can be properly * aligned with other text. Most other image don't have an implicit baseline. * @return the distance from the bottom of the image in millipoints */
public int getBaselinePositionFromBottom() { return this.baselinePositionFromBottomMpt; }
Returns the image's width in pixels.
Returns:the width in pixels
/** * Returns the image's width in pixels. * @return the width in pixels */
public int getWidthPx() { return widthPx; }
Returns the image's height in pixels.
Returns:the height in pixels
/** * Returns the image's height in pixels. * @return the height in pixels */
public int getHeightPx() { return heightPx; }
Returns the image's width in millipoints.
Returns:the width in millipoints
/** * Returns the image's width in millipoints. * @return the width in millipoints */
public int getWidthMpt() { return widthMpt; }
Returns the image's height in millipoints.
Returns:the height in millipoints
/** * Returns the image's height in millipoints. * @return the height in millipoints */
public int getHeightMpt() { return heightMpt; }
Returns the image's horizontal resolution in dpi (dots per inch).
Returns:the horizontal resolution in dpi
/** * Returns the image's horizontal resolution in dpi (dots per inch). * @return the horizontal resolution in dpi */
public double getDpiHorizontal() { return dpiHorizontal; }
Returns the image's vertical resolution in dpi (dots per inch).
Returns:the vertical resolution in dpi
/** * Returns the image's vertical resolution in dpi (dots per inch). * @return the vertical resolution in dpi */
public double getDpiVertical() { return dpiVertical; }
Returns the size in millipoints as a Dimension object.
Returns:the size in millipoints
/** * Returns the size in millipoints as a Dimension object. * @return the size in millipoints */
public Dimension getDimensionMpt() { return new Dimension(getWidthMpt(), getHeightMpt()); }
Returns the size in points as a Dimension2D object.
Returns:the size in points
/** * Returns the size in points as a Dimension2D object. * @return the size in points */
public Dimension2D getDimensionPt() { return new Dimension2DDouble(getWidthMpt() / 1000.0, getHeightMpt() / 1000.0); }
Returns the size in pixels as a Dimension object.
Returns:the size in pixels
/** * Returns the size in pixels as a Dimension object. * @return the size in pixels */
public Dimension getDimensionPx() { return new Dimension(getWidthPx(), getHeightPx()); } private void checkResolutionAvailable() { if (this.dpiHorizontal == 0 || this.dpiVertical == 0) { throw new IllegalStateException("The resolution must be set"); } }
Calculates the size in millipoints based on the size in pixels and the resolution.
/** * Calculates the size in millipoints based on the size in pixels and the resolution. */
public void calcSizeFromPixels() { checkResolutionAvailable(); this.widthMpt = (int)Math.round(UnitConv.in2mpt(this.widthPx / this.dpiHorizontal)); this.heightMpt = (int)Math.round(UnitConv.in2mpt(this.heightPx / this.dpiVertical)); }
Calculates the size in pixels based on the size in millipoints and the resolution.
/** * Calculates the size in pixels based on the size in millipoints and the resolution. */
public void calcPixelsFromSize() { checkResolutionAvailable(); this.widthPx = (int)Math.round(UnitConv.mpt2in(this.widthMpt * this.dpiHorizontal)); this.heightPx = (int)Math.round(UnitConv.mpt2in(this.heightMpt * this.dpiVertical)); }
{@inheritDoc}
/** {@inheritDoc} */
public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Size: "); sb.append(getWidthMpt()).append('x').append(getHeightMpt()).append(" mpt"); sb.append(" ("); sb.append(getWidthPx()).append('x').append(getHeightPx()).append(" px"); sb.append(" at ").append(getDpiHorizontal()).append('x').append(getDpiVertical()); sb.append(" dpi"); sb.append(")"); return sb.toString(); } }