PDA

Просмотр полной версии : BitmapData.draw рисование части области


Андрей911
24.12.2011, 18:38
Подскажите, как можно нарисовать в BitmapData.draw только часть сцены. Уже целый день мучаюсь.
Нужно нарисовать участок с координатами (x0,y0) и шириной W x H. C размерами проблем не возникает, но рисуется почему-то всегда область начиная от точки (0,0)

В конце концов обошелся кривым обходным путем


var bit:BitmapData=new BitmapData(this.width,this.height);
var rect:Rectangle=new Rectangle(x0,y0,W,H);
bit.draw(this,null,null,null,rect);
var nextBit:BitmapData=new BitmapData(W,H);
nextBit.copyPixels(bit,rect,new Point(0,0));
jpeg=JPEGEncoder.encode(nextBit,100); //Изображение того участка которого надо.
nextBit.dispose();
bit.dispose();


но чувствую, что как-то все таки можно указать координаты области для рисования напрямую. Подскажите, код знающие люди.

Пробовал так

var bit:BitmapData=new BitmapData(W,H);
bit.draw(this,new Matrix(1,0,1,0,x0,y0));
jpeg=JPEGEncoder.encode(bit,100);
bit.dispose();


Все равно рисуется область начиная от (0,0)

Jewelz
24.12.2011, 18:41
m = new Matrix()
m.tx = W;
m.ty = H;

Андрей911
25.12.2011, 11:30
Так я разобрался оказывается неправильно матрицу записывал. Надо было так, вот правильная матрица

var matrix:Matrix=new Matrix(1,0,0,1,-x0,-y0);

Тогда все работает как надо.
П.С.

m = new Matrix()
m.tx = W;
m.ty = H;

Это тоже не работает, вообще не понимаю зачем сдвиг приравнивать к высоте и ширине

Добавлено через 1 минуту
Полный код

var bit:BitmapData=new BitmapData(W,H);
bit.draw(this,new Matrix(1,0,0,1,-x0,-y0));
jpeg=JPEGEncoder.encode(bit,100);
bit.dispose();

Jewelz
25.12.2011, 15:32
Это тоже не работает, вообще не понимаю зачем сдвиг приравнивать к высоте и ширине


W и H написал для примера, буквально не нужно было воспринимать, а только как пример

сдвиг происходит, но в противоположную сторону, собственно вы это уже выяснили

Андрей911
25.12.2011, 19:11
Да, спасибо за ответ, меня это натолкнуло на мысль что с материй что-то не так сделал. У меня сверху обозначения были W и H, поэтому я и подумал что Вы их использовали.