content: package org.opencv.core;
  
  /**
   * <p>template<typename _Tp> class CV_EXPORTS Size_ <code></p>
   *
   * <p>// C++ code:</p>
   *
   *
   * <p>public:</p>
   *
   * <p>typedef _Tp value_type;</p>
   *
   * <p>//! various constructors</p>
   *
   * <p>Size_();</p>
   *
   * <p>Size_(_Tp _width, _Tp _height);</p>
   *
   * <p>Size_(const Size_& sz);</p>
   *
   * <p>Size_(const CvSize& sz);</p>
   *
   * <p>Size_(const CvSize2D32f& sz);</p>
   *
   * <p>Size_(const Point_<_Tp>& pt);</p>
   *
   * <p>Size_& operator = (const Size_& sz);</p>
   *
   * <p>//! the area (width*height)</p>
   *
   * <p>_Tp area() const;</p>
   *
   * <p>//! conversion of another data type.</p>
   *
   * <p>template<typename _Tp2> operator Size_<_Tp2>() const;</p>
   *
   * <p>//! conversion to the old-style OpenCV types</p>
   *
   * <p>operator CvSize() const;</p>
   *
   * <p>operator CvSize2D32f() const;</p>
   *
   * <p>_Tp width, height; // the width and the height</p>
   *
   * <p>};</p>
   *
   * <p>Template class for specifying the size of an image or rectangle. The class
   * includes two members called <code>width</code> and <code>height</code>. The
   * structure can be converted to and from the old OpenCV structures </code></p>
   *
   * <p><code>CvSize</code> and <code>CvSize2D32f</code>. The same set of arithmetic
   * and comparison operations as for <code>Point_</code> is available.
   * OpenCV defines the following <code>Size_<></code> aliases: <code></p>
   *
   * <p>// C++ code:</p>
   *
   * <p>typedef Size_<int> Size2i;</p>
   *
   * <p>typedef Size2i Size;</p>
   *
   * <p>typedef Size_<float> Size2f;</p>
   *
   * @see <a href="http://docs.opencv.org/modules/core/doc/basic_structures.html#size">org.opencv.core.Size_</a>
   */
  public class Size {
  
      public double width, height;
  
      public Size(double width, double height) {
          this.width = width;
          this.height = height;
      }
  
      public Size() {
          this(0, 0);
      }
  
      public Size(Point p) {
          width = p.x;
          height = p.y;
      }
  
      public Size(double[] vals) {
          set(vals);
      }
  
      public void set(double[] vals) {
          if (vals != null) {
              width = vals.length > 0 ? vals[0] : 0;
              height = vals.length > 1 ? vals[1] : 0;
          } else {
              width = 0;
              height = 0;
          }
      }
  
      public double area() {
          return width * height;
      }
  
      public Size clone() {
          return new Size(width, height);
      }
  
      @Override
      public int hashCode() {
          final int prime = 31;
          int result = 1;
          long temp;
          temp = Double.doubleToLongBits(height);
          result = prime * result + (int) (temp ^ (temp >>> 32));
          temp = Double.doubleToLongBits(width);
          result = prime * result + (int) (temp ^ (temp >>> 32));
          return result;
      }
  
      @Override
      public boolean equals(Object obj) {
          if (this == obj) return true;
          if (!(obj instanceof Size)) return false;
          Size it = (Size) obj;
          return width == it.width && height == it.height;
      }
  
      @Override
      public String toString() {
          return (int)width + "x" + (int)height;
      }
  
  }
  