The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar...
Transcript of The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar...
![Page 1: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/1.jpg)
Chapter 6Described Static Visual Content
The Design and Implementation ofMultimedia Software
David Bernstein
Jones and Bartlett Publishers
www.jbpub.com
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 1 / 101
![Page 2: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/2.jpg)
Introduction
About this Chapter
• The description of static visual content the description ofgeometric shapes and the way in which they should be rendered.
• Two common examples of described static visual content arescalable graphics and outline fonts
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 2 / 101
![Page 3: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/3.jpg)
Introduction
Some Common (Simple) Geometric Shapes
0-Dimensional 1-Dimensional 2-Dimensional
Point Line RectangleCurve Polygon
Ellipse
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 3 / 101
![Page 4: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/4.jpg)
A ‘Quick Start’
What’s Next
Some immediate gratification.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 4 / 101
![Page 5: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/5.jpg)
A ‘Quick Start’
Some Participants in Java
• Requirements of Geometric Shapes:
Shape
• A Realization:
Rectangle
• Rendering:
Use the draw() method in the Graphics2D class
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 5 / 101
![Page 6: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/6.jpg)
A ‘Quick Start’
A Simple Example – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar RandomRectangleDemo
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 6 / 101
![Page 7: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/7.jpg)
A ‘Quick Start’
A Simple Example – The Structure
import java.awt.*;
import java.awt.geom.*;
import java.util.Random;
import javax.swing.*;
public class RandomRectangleCanvas extends JComponent
{
private Random generator;
public RandomRectangleCanvas()
{
super();
generator = new Random(System.currentTimeMillis());
}
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 7 / 101
![Page 8: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/8.jpg)
A ‘Quick Start’
A Simple Example – paint()
public void paint(Graphics g)
{
Graphics2D g2;
int height, maxHeight, maxWidth, width, x, y;
Rectangle rectangle;
g2 = (Graphics2D)g;
maxHeight = getHeight();
maxWidth = getWidth();
x = generator.nextInt(maxWidth - 1);
y = generator.nextInt(maxHeight - 1);
width = generator.nextInt(maxWidth - x - 1);
height = generator.nextInt(maxHeight - y - 1);
rectangle = new Rectangle(x, y, width, height);
g2.draw(rectangle);
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 8 / 101
![Page 9: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/9.jpg)
Encapsulating Simple Geometric Shapes
What’s Next
We need to consider the encapsulation of simple geometric shapes.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 9 / 101
![Page 10: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/10.jpg)
Encapsulating Simple Geometric Shapes
Some Java Classes
• 0-Dimensional:
Point2D
• 1-Dimensional:
Line2D
CubicCurve2D
QuadCurve2D
• 2-Dimensional:
Rectangle2D
RoundRectangle2D
Ellipse2D
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 10 / 101
![Page 11: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/11.jpg)
Encapsulating Simple Geometric Shapes
Some Java Classes – A Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 11 / 101
![Page 12: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/12.jpg)
Encapsulating Simple Geometric Shapes 0-Dimensional Shapes
Defining Points
• A point is defined by its coordinates.
• On the plane, a point has two coordinates, usually called thex-coordinate (i.e., horizontal coordinate) and y-coordinate (i.e.,vertical coordinate).
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 12 / 101
![Page 13: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/13.jpg)
Encapsulating Simple Geometric Shapes 0-Dimensional Shapes
An Example of a Point
// Construct a point
point = new Point2D.Double(20.0, 30.0);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 13 / 101
![Page 14: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/14.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Explicit Form of a Line
• Defined:
y = Ax+B (1)
• Shortcomings:
Does not enable us to represent vertical lines.
Second, one is generally interested in line segments, not lines.
Though familiar, it is not very intuitive.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 14 / 101
![Page 15: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/15.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Parametric Form
The parametric form of a line segment in terms of the coefficientsa = (ax, ay) and b = (bx, by) is:
x(u) = u0ax + u1bx = ax + ubx (2)
y(u) = u0ay + u1by = ay + uby (3)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 15 / 101
![Page 16: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/16.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Parametric Form (cont.)
• In Java, a line segment is defined in terms of its two endpoints, pand q.
• To ensure that (x(0), y(0)) equals p, set ax = px and ay = py.
• To ensure that (x(1), y(1)) equals q, set bx = qx − px andby = qy − py.
• Java’s Line2D class does this calculation.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 16 / 101
![Page 17: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/17.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
An Example of a Line
// Construct a line
line = new Line2D.Double(0.0, 0.0, 50.0, 75.0);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 17 / 101
![Page 18: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/18.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Parametric Form (cont.)
The parametric form can also be written as:
x(u) = px + uqx − upx = (1− u)px + uqx (4)
y(u) = py + uqy − upy = (1− u)py + uqy (5)
That is, x(u) is a convex combination of px and py, and y(u) is aconvex combination of qx and qy [with weights (1− u) and u].
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 18 / 101
![Page 19: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/19.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Quadratic Bezier Curve Segments
A quadratic Bezier curve segments is defined in terms of the two endpoints, p and q, and one control point, r, as follows:
x(u) = (1− u)2px + 2(1− u)urx + u2qx (6)
y(u) = (1− u)2py + 2(1− u)ury + u2qy (7)
for u ∈ [0, 1].
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 19 / 101
![Page 20: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/20.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Quadratic Bezier Curve Segments (cont.)
End Point 2
End Point 1
Control Point
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 20 / 101
![Page 21: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/21.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
An Example of a Quadratic Bezier Curve Segment
// Construct a quadratic curve
quadraticCurve = new QuadCurve2D.Double(
120.0, 120.0, // End 1
300.0, 180.0, // Control
130.0, 190.0); // End 2
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 21 / 101
![Page 22: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/22.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Cubic Bezier Curve Segments
Finally, a cubic Bezier curve segment is defined in terms of the two endpoints, p and q, and two control points, r and s, as follows:
x(u) = (1− u)3px + 3(1− u)2urx + 3(1− u)2usx + u3qx (8)
y(u) = (1− u)3py + 3(1− u)2ury + 3(1− u)2usy + u3qy (9)
for u ∈ [0, 1].
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 22 / 101
![Page 23: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/23.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
Cubic Bezier Curve Segments (cont.)
End Point 2
End Point 1
Control Point 1
Control Point 2
Note that the slope of the curve at each end point is the slope of theline segment connecting that end point and its associated control point.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 23 / 101
![Page 24: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/24.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
An Example of a Cubic Bezier Curve Segment
// Construct a cubic curve
cubicCurve = new CubicCurve2D.Double(320.0, 320.0, // End 1
300.0, 180.0, // Control 1
330.0, 370.0, // End 2
360.0, 390.0); // Control 2
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 24 / 101
![Page 25: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/25.jpg)
Encapsulating Simple Geometric Shapes 1-Dimensional Shapes
An Advantage of Bezier Curves
They can be manipulated using the end points and the control point(s).
In extras:java -cp multimedia2.jar;examples.jar CurveDemo
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 25 / 101
![Page 26: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/26.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Rectangles
• Loose Definition:
A four-sided shape with four right angles in which the sides areparallel to the coordinate axes.
• Specification:
Use the four corners.
Use one corner and the width and height.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 26 / 101
![Page 27: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/27.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
An Example of a Rectangle
// Construct a rectangle
rectangle = new Rectangle2D.Double(10.0, 20.0, // Upper Left
30.0, // Width
60.0); // Height
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 27 / 101
![Page 28: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/28.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Ellipses
• Loose Definition:
A flattened circle.
• Specification:
Use the center and major and minor diameters (or major and minoraxes).
Use one corner and the width and height.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 28 / 101
![Page 29: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/29.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Ellipses (cont.)
Upper Left Corner
Major Diameter
Minor Diameter
Center
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 29 / 101
![Page 30: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/30.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Arcs
• Loose Definition:
A part of an ellipse.
• Specification:
Use an ellipse and the starting and ending angles.
Use an ellipse and the starting and angular extent.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 30 / 101
![Page 31: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/31.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Arcs (cont.)
Start Angle
Angular Extent
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 31 / 101
![Page 32: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/32.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
An Example of an Arc
// Construct an arc
arc = new Arc2D.Double(10.0, 200.0, // Upper Left
150.0, // Width
100.0, // Height
0.0, // Starting Angle
135.0, // Angular Extent
Arc2D.PIE); // Type
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 32 / 101
![Page 33: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/33.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Categorizing Shapes
• Closed/Open:
Closed shapes have a well-defined interior and exterior.
• Convex/Nonconvex:
A shape is convex if a line segment drawn between any two pointsin the shape lies entirely inside the shape.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 33 / 101
![Page 34: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/34.jpg)
Encapsulating Simple Geometric Shapes 2-Dimensional Shapes
Categorizing Shapes (cont.)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 34 / 101
![Page 35: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/35.jpg)
Encapsulating Glyphs and Fonts
What’s Next
We need to consider the encapsulation of shapes representingcharacters.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 35 / 101
![Page 36: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/36.jpg)
Encapsulating Glyphs and Fonts
Glyphs
Definition
A glyph is a shape that represents one or more characters (in acharacter set).
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 36 / 101
![Page 37: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/37.jpg)
Encapsulating Glyphs and Fonts
Ligatures
Most of the time, a glyph represents a single character. However, foraesthetic reasons, multiple characters are sometimes represented by asingle glyph called a ligature.
fi ifTwo glyphs One glyph
(a ligature)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 37 / 101
![Page 38: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/38.jpg)
Encapsulating Glyphs and Fonts
Fonts
Definition
A font is a set of glyphs.
Fonts are usually said to have a face or family (e.g., Garamond, TimesNew Roman) and a style (e.g., italic, bold).
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 38 / 101
![Page 39: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/39.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
Properties of Glyphs
• Width
• Left-Side Bearing
• Right-Side Bearing
• Advance – the sum of the three
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 39 / 101
![Page 40: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/40.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
Positive and Negative Right-Side Bearings
A fWidth
RSBLSB
Advance
Width
Advance
RSBLSB
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 40 / 101
![Page 41: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/41.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
Kerning
The use of different bearings for different glyphs is called kerning.
WATERWATER
with kerning
without kerning
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 41 / 101
![Page 42: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/42.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
Some Details in Java
• The rendering engine keeps information about fonts in aFontRenderContext object.
• Given a FontRenderContext, a Font object can create aGlyphVector.
• GlyphVector has several getOutline() methods, each of whichreturns a Shape.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 42 / 101
![Page 43: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/43.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
An Example of Glyphs
protected void paintGlyphs(Graphics2D g2, String text)
{
FontRenderContext frc;
GlyphVector glyphs;
Shape shape;
frc = g2.getFontRenderContext();
glyphs = font.createGlyphVector(frc, text);
shape = glyphs.getOutline(0.0f, 100.0f);
g2.setColor(Color.BLACK);
g2.draw(shape);
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 43 / 101
![Page 44: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/44.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
An Example of Glyphs – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar GlyphDemo GlyphCanvas Media
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 44 / 101
![Page 45: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/45.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
An Example of Fonts
public FontCanvas(int fSize)
{
GraphicsEnvironment ge;
int i;
this.fSize = fSize;
current = 0;
// Get the available font families
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
fontFamilies = ge.getAvailableFontFamilyNames();
// Construct the fonts and text samples
fonts = new Font[fontFamilies.length];
sample = new String[fontFamilies.length];
for (i=0; i < fontFamilies.length; i++)
{
fonts[i] = new Font(fontFamilies[i],
Font.PLAIN, fSize);
sample[i] = fontFamilies[i]+
" abcdefABCDEF123456!@#^" +
" Av fi " +
" \u00c0 \u00c1 \u00c2 \u00c7";
if (fontFamilies[i].equalsIgnoreCase("Dialog"))
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 45 / 101
![Page 46: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/46.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
An Example of Fonts (cont.)
{
current = i;
}
}
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 46 / 101
![Page 47: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/47.jpg)
Encapsulating Glyphs and Fonts Glyphs as Shapes
An Example of Fonts – Demonstration
In extras:java -cp multimedia2.jar;examples.jar FontCanvasDemo
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 47 / 101
![Page 48: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/48.jpg)
Encapsulating Glyphs and Fonts Measuring Glyphs and Fonts
Terminology
J M U j m u Ö@BaselineAscent
DescentLeading
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 48 / 101
![Page 49: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/49.jpg)
Encapsulating Glyphs and Fonts Measuring Glyphs and Fonts
Font Metrics in Java
• Given a FontRenderContext, a Font can provide a LineMetrics
object.
• This object can be used to get information about the font’smetrics.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 49 / 101
![Page 50: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/50.jpg)
Encapsulating Glyphs and Fonts Measuring Glyphs and Fonts
An Example Using LineMetrics
FontRenderContext frc;
GlyphVector glyphs;
frc = g2.getFontRenderContext();
glyphs = font.createGlyphVector(frc, text);
LineMetrics lm;
lm = font.getLineMetrics(text, frc);
float ascent, descent, height, leading;
// Get the various metrics
ascent = lm.getAscent();
descent = lm.getDescent();
height = lm.getHeight();
leading = lm.getLeading();
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 50 / 101
![Page 51: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/51.jpg)
Encapsulating Glyphs and Fonts Measuring Glyphs and Fonts
An Example Using LineMetrics – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar GlyphDemo GlyphMetricsCanvas abjMZ
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 51 / 101
![Page 52: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/52.jpg)
Encapsulating Glyphs and Fonts Measuring Glyphs and Fonts
Using LineMetrics to Center Text
Get the Bounds
// Get the bounding box
bounds = glyphs.getVisualBounds();
Center the Shape
Dimension d;
float x, y;
d = getSize();
// Center the text
x = (float)(d.width/2. - bounds.getWidth()/2. );
y = (float)(d.height/2. + bounds.getHeight()/2.);
// Get the outline when centered
shape = glyphs.getOutline(x,y);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 52 / 101
![Page 53: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/53.jpg)
Encapsulating Glyphs and Fonts Measuring Glyphs and Fonts
Centering Text – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar GlyphDemo CenteredGlyphCanvas Media
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 53 / 101
![Page 54: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/54.jpg)
Encapsulating Glyphs and Fonts Convenience Methods
There Must be an Easier Way
• For Plain Text:
drawGlyphVector(GlyphVector, float, float)
drawString(String, float, float)
• For Attributed Text:
drawString(AttributedCharacterIterator, float, float)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 54 / 101
![Page 55: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/55.jpg)
Encapsulating Glyphs and Fonts Convenience Methods
An Example of Attributed Text
AttributedString as;
as = new AttributedString(text);
for (int i=0; i < text.length(); i++)
{
as.addAttribute(TextAttribute.FONT,
new Font("Serif", Font.PLAIN, (i+10)),
i, i+1);
}
g2.setColor(Color.BLACK);
g2.drawString(as.getIterator(), 0, 100);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 55 / 101
![Page 56: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/56.jpg)
Encapsulating Glyphs and Fonts Convenience Methods
Attributed Text – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar GlyphDemo AttributedStringCanvas MultimediaSoftware
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 56 / 101
![Page 57: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/57.jpg)
Encapsulating Complicated Geometric Shapes
What’s Next
We need to consider the encapsulation of other complicated geometricshapes.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 57 / 101
![Page 58: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/58.jpg)
Encapsulating Complicated Geometric Shapes
Think Like a Pen Plotter
• The Idea:
A common way to describe complicated geometric shapes is with asequence of “move to”, “line to”, “quadratic-curve to”, and/or“cubic-curve to” segments.
• In Java:
Create a Path2D object.
All objects that implement the Shape interface have agetPathIterator() method that returns a PathIterator object
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 58 / 101
![Page 59: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/59.jpg)
Encapsulating Complicated Geometric Shapes
An Example of a Complicated Shape
bodyShape = new Path2D.Float();
bodyShape.moveTo( 20, 50);
bodyShape.lineTo( 20, 70);
bodyShape.lineTo( 20, 90);
bodyShape.lineTo( 10, 90);
bodyShape.lineTo( 10,100);
bodyShape.lineTo( 80,100);
bodyShape.lineTo( 80, 90);
bodyShape.lineTo( 40, 90);
bodyShape.lineTo( 40, 70);
bodyShape.lineTo( 40, 50);
bodyShape.closePath();
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 59 / 101
![Page 60: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/60.jpg)
Operating on Multiple Shapes
What’s Next
We need to consider operations on multiple shapes.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 60 / 101
![Page 61: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/61.jpg)
Operating on Multiple Shapes
Constructive Area Geometry
Definition
Constructive area geometry (CAG) is the process of performingset-theoretic operations (e.g., union, intersection, difference, symmetricdifference) on two-dimensional shapes.
In Java, constructive area geometry functionality is provided by theArea class, which can be used to decorate any object that implementsthe Shape interface.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 61 / 101
![Page 62: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/62.jpg)
Operating on Multiple Shapes
An Example of CAG
e = new Area(ellipse);
r = new Area(rectangle);
if (op.equalsIgnoreCase("Union"))
e.add(r);
else if (op.equalsIgnoreCase("Intersection"))
e.intersect(r);
else if (op.equalsIgnoreCase("Difference"))
e.subtract(r);
else
e.exclusiveOr(r);
g2.setPaint(GOLD);
g2.fill(e);
g2.setPaint(PURPLE);
g2.draw(e);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 62 / 101
![Page 63: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/63.jpg)
Operating on Multiple Shapes
An Example of CAG – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar ConstructiveAreaGeometryDemo
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 63 / 101
![Page 64: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/64.jpg)
Operating on Multiple Shapes
An Example of CAG (cont.)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 64 / 101
![Page 65: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/65.jpg)
Operating on Individual Shapes
What’s Next
We need to consider operations on individual shapes.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 65 / 101
![Page 66: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/66.jpg)
Operating on Individual Shapes
Affine Transformations
• In many situations, one doesn’t want to transform the coordinatespace, instead one wants to transform the content itself.
• Again, the most common transforms are translation, scaling,rotation and reflection.
• In Java, transforms are implemented in the AffineTransformclass.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 66 / 101
![Page 67: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/67.jpg)
Operating on Individual Shapes
Translation
AffineTransform.getTranslateInstance(double, double)
(0,0)
(10,10)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 67 / 101
![Page 68: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/68.jpg)
Operating on Individual Shapes
Scaling
AffineTransform.getScaleInstance(double, double)
(0,0)
(10,10)
(0,0)
(10,10)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 68 / 101
![Page 69: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/69.jpg)
Operating on Individual Shapes
Reflection
AffineTransform aroundX, aroundY;
aroundX = new AffineTransform( 1.0, 0.0, 0.0,-1.0, 0.0, 0.0);
aroundY = new AffineTransform(-1.0, 0.0, 0.0, 1.0, 0.0, 0.0);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 69 / 101
![Page 70: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/70.jpg)
Operating on Individual Shapes
Reflection (cont.)
(0,0)
(10,10)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 70 / 101
![Page 71: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/71.jpg)
Operating on Individual Shapes
Rotation
AffineTransform.getRotateInstance(double radians) creates arotational transform for rotating around the point (0,0).
q
1
(0,0)
(10,10)
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 71 / 101
![Page 72: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/72.jpg)
Operating on Individual Shapes
Iteratively Rotating a Complicated Shape
protected void paintGlyphs(Graphics2D g2, String text)
{
AffineTransform at, trans;
AlphaComposite alpha;
Dimension d;
float angle, x, y;
FontRenderContext frc;
GlyphVector glyphs;
int i;
Shape shape, transformedShape;
d = getSize();
frc = g2.getFontRenderContext();
glyphs = font.createGlyphVector(frc, text);
shape = glyphs.getOutline(0.0f, 100.0f);
g2.setColor(Color.BLACK);
for (i=0; i < 6; i++)
{
angle = (float)(Math.PI/6.0 * i);
x = (float)(d.width/2.0);
y = (float)(d.height/2.0);
at = AffineTransform.getRotateInstance(angle,x,y);
trans = AffineTransform.getTranslateInstance(x,y);
at.concatenate(trans);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 72 / 101
![Page 73: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/73.jpg)
Operating on Individual Shapes
Iteratively Rotating a Complicated Shape (cont.)
transformedShape = at.createTransformedShape(shape);
g2.fill(transformedShape);
}
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 73 / 101
![Page 74: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/74.jpg)
Operating on Individual Shapes
Iteratively Rotating a Complicated Shape –Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar GlyphDemo SpiralGlyphCanvas Text
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 74 / 101
![Page 75: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/75.jpg)
Rendering Described Content
What’s Next
We need to consider the rendering of described static visual content.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 75 / 101
![Page 76: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/76.jpg)
Rendering Described Content
Steps in the Process
Stroke Fill
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 76 / 101
![Page 77: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/77.jpg)
Rendering Described Content
Stroking
Definition
Stroking is the rendering of the border (i.e., outline) of the describedcontent.
Stroke Interface
BasicStroke Class
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 77 / 101
![Page 78: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/78.jpg)
Rendering Described Content
Stroking - Joins
Bevel Join Mitre Join Round Join
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 78 / 101
![Page 79: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/79.jpg)
Rendering Described Content
Stroking - Caps
Butt Cap Square Cap Round Cap
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 79 / 101
![Page 80: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/80.jpg)
Rendering Described Content
Filling
Definition
Filling is the rendering of the interior of the content.
Paint Interface
Color, GradientPaint and TexturePaint Classes
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 80 / 101
![Page 81: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/81.jpg)
Rendering Described Content
Fill Techniques
Solid Fill Gradient FillStart Color
End Color
Angle
Sampled Fill
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 81 / 101
![Page 82: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/82.jpg)
Rendering Described Content
Some Rendering Examples
// The first rectangle
rectangle = new Rectangle2D.Double( 10.0, 20.0,
100.0,
150.0);
// Fill in JMU Gold
g2.setPaint(new Color(0xC2, 0xA1, 0x4D));
g2.fill(rectangle);
// Stroke in JMU purple
stroke = new BasicStroke(5.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_MITER);
g2.setStroke(stroke);
g2.setColor(new Color(0x45, 0x00, 0x84));
g2.draw(rectangle);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 82 / 101
![Page 83: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/83.jpg)
Rendering Described Content
Some Rendering Examples (cont.)
// The second rectangle
rectangle = new Rectangle2D.Double( 200.0, 200.0,
100.0,
150.0);
// Fill using a gradient
gradient=new GradientPaint(200.0f, 275.0f, Color.CYAN,
300.0f, 275.0f, Color.WHITE);
g2.setPaint(gradient);
g2.fill(rectangle);
// Stroke in black
stroke = new BasicStroke(10.0f,
BasicStroke.CAP_BUTT,
BasicStroke.JOIN_ROUND);
g2.setStroke(stroke);
g2.setColor(Color.BLACK);
g2.draw(rectangle);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 83 / 101
![Page 84: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/84.jpg)
Rendering Described Content
Some Rendering Examples (cont.)
// The third rectangle
rectangle = new Rectangle2D.Double( 50.0, 50.0,
200.0,
250.0);
// Use alpha blending to achieve a transparency effect
composite = AlphaComposite.getInstance(
AlphaComposite.SRC_OVER,
0.5f);
g2.setComposite(composite);
// Fill in yellow
g2.setPaint(Color.YELLOW);
g2.fill(rectangle);
// Don’t stroke
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 84 / 101
![Page 85: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/85.jpg)
Rendering Described Content
Some Rendering Examples – Demonstration
In examples/chapter:java -cp multimedia2.jar;examples.jar RenderingExampleCanvasDemo
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 85 / 101
![Page 86: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/86.jpg)
Design of a Described Static Visual Content System
What’s Next
We need to design a described static visual content system.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 86 / 101
![Page 87: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/87.jpg)
Design of a Described Static Visual Content System
Requirements
F6.1 Support the addition of described static visual content.
F6.2 Support the removal of described static visual content.
F6.3 Support z-ordering of described static visual content.
F6.4 Support the transformation of described static visualcontent.
F6.5 Support the rendering of described static visual content.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 87 / 101
![Page 88: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/88.jpg)
Design of a Described Static Visual Content System
Alternative 1
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 88 / 101
![Page 89: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/89.jpg)
Design of a Described Static Visual Content System
Alternative 2
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 89 / 101
![Page 90: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/90.jpg)
Design of a Described Static Visual Content System
Shortcomings of Alternatives 1 and 2
What are the shortcomings?
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 90 / 101
![Page 91: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/91.jpg)
Design of a Described Static Visual Content System
Shortcomings of Alternatives 1 and 2
The specialization of the JComponent class must both manageShape objects and render them.
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 90 / 101
![Page 92: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/92.jpg)
Design of a Described Static Visual Content System
Alternative 3
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 91 / 101
![Page 93: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/93.jpg)
Design of a Described Static Visual Content System
statik.TransformableContent
package visual.statik.described;
import java.awt.*;
import java.awt.geom.*;
public interface TransformableContent
extends visual.statik.TransformableContent
{
public abstract void setColor(Color color);
public abstract void setPaint(Paint paint);
public abstract void setStroke(Stroke stroke);
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 92 / 101
![Page 94: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/94.jpg)
Design of a Described Static Visual Content System
Structure of statik.described.Content
package visual.statik.described;
import java.awt.*;
import java.awt.geom.*;
public class Content
extends visual.statik.AbstractTransformableContent
implements TransformableContent
{
protected Color color;
protected Paint paint;
protected Rectangle2D.Double originalBounds;
protected Rectangle2D.Double transformedBounds;
protected Shape originalShape;
protected Shape transformedShape;
protected Stroke stroke;
private final Stroke DEFAULT_STROKE =
new BasicStroke();
private final AffineTransform IDENTITY =
new AffineTransform();
public Content()
{
this(null, null, null, null);
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 93 / 101
![Page 95: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/95.jpg)
Design of a Described Static Visual Content System
Structure of statik.described.Content (cont.)
public Content(Shape shape, Color color, Paint paint,
Stroke stroke)
{
super();
setColor(color);
setPaint(paint);
setStroke(stroke);
setShape(shape);
}
private void getBoundsFor(Rectangle2D.Double r, Shape s)
{
Rectangle2D temp;
if (s != null)
{
temp = s.getBounds2D();
if (temp != null)
{
r.x = temp.getX();
r.y = temp.getY();
r.width = temp.getWidth();
r.height = temp.getHeight();
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 94 / 101
![Page 96: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/96.jpg)
Design of a Described Static Visual Content System
Structure of statik.described.Content (cont.)
}
}
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 95 / 101
![Page 97: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/97.jpg)
Design of a Described Static Visual Content System
Getters in statik.described.Content
public Color getColor()
{
return color;
}
public Paint getPaint()
{
return paint;
}
public Stroke getStroke()
{
return stroke;
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 96 / 101
![Page 98: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/98.jpg)
Design of a Described Static Visual Content System
Setters in statik.described.Content
public void setColor(Color color)
{
this.color = color;
}
public void setPaint(Paint paint)
{
this.paint = paint;
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 97 / 101
![Page 99: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/99.jpg)
Design of a Described Static Visual Content System
Transformations in statik.described.Content
private void createTransformedContent(AffineTransform at)
{
transformedShape = at.createTransformedShape(
originalShape);
setTransformationRequired(false);
getBoundsFor(transformedBounds, transformedShape);
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 98 / 101
![Page 100: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/100.jpg)
Design of a Described Static Visual Content System
Bounds in statik.described.Content
public Rectangle2D getBounds2D(boolean transformed)
{
if (transformed) return transformedBounds;
else return originalBounds;
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 99 / 101
![Page 101: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/101.jpg)
Design of a Described Static Visual Content System
Rendering in statik.described.Content
public void render(Graphics g)
{
Color oldColor;
Graphics2D g2;
Paint oldPaint;
Stroke oldStroke;
g2 = (Graphics2D)g;
// Transform the Shape (if necessary)
if (isTransformationRequired())
{
createTransformedContent();
}
if (transformedShape != null)
{
// Save the state
oldColor = g2.getColor();
oldPaint = g2.getPaint();
oldStroke = g2.getStroke();
// Fill the Shape (if appropriate)
if (paint != null)
{
g2.setPaint(paint);
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 100 / 101
![Page 102: The Design and Implementation of Multimedia Software · java -cp multimedia2.jar;examples.jar SimpleShapeCanvasDemo David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett](https://reader034.fdocuments.in/reader034/viewer/2022043006/5f90adc05eb6be4baf37bc44/html5/thumbnails/102.jpg)
Design of a Described Static Visual Content System
Rendering in statik.described.Content (cont.)
g2.fill(transformedShape);
}
// Stroke the Shape if appropriate
if (color != null)
{
if (stroke != null) g2.setStroke(stroke);
g2.setColor(color);
g2.draw(transformedShape);
}
// Restore the state
g2.setColor(oldColor);
g2.setPaint(oldPaint);
g2.setStroke(oldStroke);
}
}
David Bernstein (jbpub.com) Multimedia Software Jones and Bartlett 101 / 101