получить какую-то часть сцены? - PullRequest
0 голосов
/ 18 июня 2010

Я использую скрипт jpeg encoder.в примере сценария мувиклип преобразуется в формат JPEG.иначе я хочу преобразовать сцену, но только некоторую ее часть, такую ​​как x: 320-500, y: 0-600.это возможно?

function createJPG(m:MovieClip, quality:Number, fileName:String)
{
    var jpgSource:BitmapData = new BitmapData (m.width, m.height);
    jpgSource.draw(m);

    var jpgEncoder:JPGEncoder = new JPGEncoder(quality);
    var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);     
    ...
}

create(partOfStage,90,"name");

Ответы [ 3 ]

5 голосов
/ 19 июня 2010

Ответы, которые уже размещены, вероятно, будут работать, но есть более простой способ. Матрица - ваш друг здесь.

При этом также используется меньше ресурсов: только один BitmapData и только такой большой, каким он должен быть (то есть такой же большой, как область для обрезки):

//  x:320-500, y:0-600
//  --> x: 320, y: 0, width: (500-320), height: (600 - 0)
var cropArea:Rectangle = new Rectangle(320,0,180,600);
var mat:Matrix = new Matrix();
mat.translate(-cropArea.x,-cropArea.y);
var snapshot:BitmapData = new BitmapData(cropArea.width,cropArea.height);
snapshot.draw(stage,mat);

Вы можете избежать прямоугольника, но я бы оставил его, так как он более читабелен, на мой взгляд.

1 голос
/ 18 июня 2010

Вот краткий пример:

graphics.beginFill(0x000000);
graphics.drawRect(0, 0, 100, 100);
graphics.endFill();
graphics.lineStyle(0,0xFF0000);
graphics.moveTo(0, 0);
graphics.lineTo(100, 100);
graphics.beginFill(0xFF0000);
graphics.drawRect(95, 95, 5, 5);
graphics.endFill();
//          
var captureArea:Rectangle=new Rectangle(80,80,100,100);         
var bitmapData1:BitmapData=new BitmapData(stage.stageWidth, stage.stageHeight,true,0);
var bitmapData2:BitmapData=new BitmapData(captureArea.width, captureArea.height,false,0x00FF00);
bitmapData1.draw(stage, null, null, null);
bitmapData2.copyPixels(bitmapData1, captureArea, new Point());  
var bitmap:Bitmap=new Bitmap(bitmapData2);
bitmap.x=100;
bitmap.y=100;
addChild(bitmap);

Надеюсь, это поможет вам!

0 голосов
/ 18 июня 2010

Не знаю, лучшее ли это решение, но:
Вы можете создать другую BitmapData и copyPixel к нему из исходного BitmapData в цикле.

for(var x:int = startX; x < endX; x++){
    for(var y:int = startY; y < endY; y++){
        newBD.setPixel(x, y, originalBD.getPixel(startX+x, startY+y));
    }
}

РЕДАКТИРОВАТЬ: на самом деле .. неважно .. уже есть функция для этого http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/display/BitmapData.html#copyPixels%28%29

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...