Matrix-Based Drawing

Primitives and copying blocks of pixels are nice, but they’re kind of limiting. Oftentimes, you must take pixels and scale them, rotate them, and move them around. Of course, if you’ve worked with Java 2D, you know this as the concept of affine transformations , which maps one set of pixels to another set of pixels, keeping straight lines straight and parallel lines parallel.

If you’ve really worked with Java 2D’s affine transformations, you probably know that they’re represented as a linear algebra matrix, with coordinates mapped from source to destination by multiplying and/or adding pixel values against coefficients of the matrix. By changing the coefficients in the matrix to interesting values (or trigonometric functions), you can define different kinds of transformations.

QuickTime does exactly the same thing, with the minor exception that rather than hiding the matrix in a wrapper (like J2D’s AffineTransformation class), it puts the matrix front-and-center throughout the API. One reason for this is that it’s also a major part of the file format—tracks in a movie all have a matrix in their metadata to determine how they’re rendered at runtime.

QuickTime matrix manipulation can basically do three things for you:


Move a block of pixels from one location to another


Rotate pixels around a given point


Make block bigger or smaller, or change its shape


This is a lab, not a lecture, so you don’t get the all-singing, all-dancing, all-algebra ...

Get QuickTime for Java: A Developer's Notebook now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.