Non-affine transformations

I was just reading about how the Matrix class can only apply affine transformations to objects. According to the documentation, “Affine transformations preserve the straightness of lines while transforming, so that parallel lines stay parallel.” So how does one apply non-affine transformations?

The effect I want to achieve is like the effect you get when you hold shift and ctrl while dragging a corner in free transform mode. But I want to be able to apply it to movieclips and not just shapes. And I know 3D rotation can achieve a similar effect, but I want to keep it 2D.

This was done by using free transform on shapes in the authoring environment. The black strokes represent where the blue and green squares were before the transformation. As you can see, the midpoint is lower than it was before, meaning everything has been pushed downwards. That’s not quite what I’m going for. I’d prefer to just stretch the shape horizontally without moving things vertically at all, but I’d be happy with just about any non-affine transformation at this point.

Is this possible without going so far as to say write a method to map out pixels in a BitmapData object?