2

我有一个半新手问题。我已经编程多年了,但我所有的早期经验都是 OOP 之前的,我的大脑就这样安定下来了。我也是 Actionscript 的新手。所以希望这对某人来说是一件容易的事。

我正在使用 as3svgrendererlib 导入 SVG。它工作得很好,但我需要能够序列化它输出的图形。但是我不能序列化精灵,所以我必须一直到 IGraphicsData 级别才能得到我能得到的东西。但是图书馆没有给我这些数据。它只给我精灵。所以我需要改变它。

由于它最终使用的绘图方法屈指可数(beginFilldrawRect等),我的想法是,如果我可以连接这些方法并用我自己的代码补充它们以输出 IGraphicsData,那么我就可以做生意了。现在我知道我可以通过使用“扩展”类来做到这一点,但这需要对库进行大量修改以将所有这些标准调用更改为我的自定义调用。

所以我想知道:是否有一种神奇的 OOP 方法来编写可以普遍拦截对现有方法的调用而无需修改原始调用的方法?

谢谢!:)

编辑:我需要独立于分辨率,因此将图形保存在矢量中而不是将它们转换为位图很重要。

4

1 回答 1

0

你不能在 OOP 中做这种事情,你要么需要覆盖类(但在你的情况下这可能是不可能的),要么直接修改库。

但是,在您的情况下,可能的解决方案是:

  1. 使用库将 SVG 绘制到精灵。
  2. 将精灵绘制到BitmapData.
  3. 最后,使用获取像素数据getPixels()并对其进行序列化。

像这样的东西应该有效;

var sprite:Sprite = new Sprite();

// Add the child to the stage...
// Draw the SVG to the sprite...

var bmpData:BitmapData = new BitmapData(spriteWidth, spriteHeight);
bmpData.draw(sprite);

var pixelData:ByteArray = bmpData.getPixels(new Rectangle(0, 0, bmpData.width, bmpData.height));

// Here serialize the byte array

在此示例中,请注意 spriteWidth/spriteHeight 不一定是“sprite.width”和“sprite.height”(sprite 通常报告的尺寸与您预期的不同)。因此,您需要提前确定渲染 SVG 的大小,并在构建BitmapData.

于 2012-06-06T13:42:35.207 回答