BitmapData - масштабировать и выделять область в одной матрице? - PullRequest
0 голосов
/ 29 июня 2011

Я использую матрицу преобразования как часть растрового рисования, чтобы выбрать область моей цели, а не рисование из 0,0:

var bmd:BitmapData = new BitmapData(target.width,target.height,true,0);
var mat:Matrix = new Matrix(1,0,0,1,-target.x,-target.y);
bmd.draw(this,mat);

Это прекрасно работает, рисуя содержимое this используя target в качестве границы.Я также могу использовать матрицу для масштабирования при рисовании следующим образом:

var scale:Number = .32;
var bmd:BitmapData = new BitmapData(target.width/scale,target.height/scale,true,0);
var mat:Matrix = new Matrix(scale,0,0,scale);
bmd.draw(this,mat);

Проблема возникает, когда я пытаюсь объединить два в одну операцию:

var scale:Number = .32;
var bmd:BitmapData = new BitmapData(target.width/scale,target.height/scale,true,0);
var mat:Matrix = new Matrix(scale,0,0,scale,-target.x,-target.y);
bmd.draw(this,mat);

Я неконечно, что здесь происходит не так, но когда это добавлено на сцену как растровое изображение, ничего не появляется, но если я выполняю только одну или другую операцию, они оба работают как положено.Есть идеи?

1 Ответ

0 голосов
/ 29 июня 2011

Дох, второй вопрос сегодня, на который я отвечаю сам. Свойства tx и ty необходимо умножить на коэффициент масштабирования, чтобы сохранить правильные значения смещения. Предположительно, это как-то связано с порядком перевода матрицы?

Решение:

var scale:Number = .32;
var bmd:BitmapData = new BitmapData(target.width/scale,target.height/scale,true,0);
var mat:Matrix = new Matrix(scale,0,0,scale,-(target.x*scale),-(target.y*scale));
bmd.draw(this,mat);
...