我正在使用jpeg编码器脚本。在脚本示例中,影片剪辑将转换为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");
答案 0 :(得分:5)
已发布的答案可能会有效,但有一种更简单的方法。 Matrix是你的朋友。
这也使用更少的资源:只有一个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 :(得分:1)
这是一个简单的例子:
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);
希望它会对你有所帮助!
答案 2 :(得分:-1)
我不知道这是否是最佳解决方案但是:
您可以在循环中从原始BitmapData创建另一个BitmapData和copyPixel。
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