0

我正在从 500x500 的 Source 位图中从 x=100, y=100 中寻找“剪切”一个 200x200 大小的位图。这是我的代码:

  var tempData:BitmapData 
  var tempBitmap:Bitmap ;
tempData = new BitmapData(500, 500,false, 0xffffff);

tempBitmap  = new Bitmap(tempData);

tempData.draw(original,null, null, null, new Rectangle(100, 100, 200, 200),true);

效果很好,但是,

问题是它从 (0,0) 到 (100+200, 100+200)。然而,它从 (0,0) 剪辑到 (100,100)。因此尺寸大于200x200,不管其他部分是纯白色的。

我需要的绘图应该从 100,100 到 300,300 开始。因此,我将此位图放入的影片剪辑必须具有 200x200 的大小。它不应显示任何纯白色区域。但只有源位图的内容从 x=100, y=100 到 x=300, y= 300

如果我的解释仍然不清楚,请随时发表评论。

谢谢

4

1 回答 1

4

如果您要将一些像素从一个BitmapData实例复制到另一个实例,请使用它,copyPixels()因为它更快并且使用起来也更少混乱。

我将强调相关的论点:

  1. sourceBitmapData:BitmapData-BitmapData从中获取像素的实例。
  2. sourceRect:Rectangle- 一个Rectangle将指定您想要的源的哪一部分。
  3. destPoint:Point-Point表示源将被绘制在目的地的哪个位置。

所以你想要做的是:

// Define BitmapData.
var sourceBitmapData:BitmapData = new BitmapData(500, 500, false, 0xFF0000);
var destinationBitmapData:BitmapData = new BitmapData(200, 200, false, 0xFFFFFF);

// Add viewable Bitmap representation.
var view:Bitmap = new Bitmap(destinationBitmapData);
addChild(view);


// Define where pixels will be taken from off the source.
var clipRectangle:Rectangle = new Rectangle(100, 100, 200, 200);

// Define where the pixels will be drawn at on the destination.
var destPoint:Point = new Point(); // Didn't catch where you wanted this to be drawn at - simply provide your own x, y here.

// Copy some pixels from sourceBitmapData across to destinationBitmapData.
destinationBitmapData.copyPixels(sourceBitmapData, clipRectangle, destPoint);

让我知道是否有任何不清楚的地方。

于 2012-05-23T06:29:54.723 回答