0

编辑:它自己工作的转换/复制过程,我只是不知道如何告诉位图数据,要复制阶段的哪个部分 - 我试图通过将画布电影到 x=0 y=0 来解决这个问题,但没有显示任何变化. 唯一显示变化的是我在绘制之前确实将画布移动到零,但这完全是错误的,因为具有负坐标的绘图部分不会被复制,因为坐标更改只会影响位图,如果你之前这样做你开始画画

旧条目:我想将 Sprite.graphics 转换为 bitmapData,因为我有一个 drawTool 允许用户绘制线条,我认为这些线条位于 Sprite.graphics 内部。

我需要将这些线转换为位图数据,因为这允许我稍后将它们变形,但我不能使用它

Bitmapdata.draw(Sprite.graphics);

并且仅使用 Sprite 而不是 Sprite.graphics 不会显示任何结果 =\ 需要帮助!

4

3 回答 3

2

如果您只想从 (0,0) 以外的原点绘制某个部分,请使用矩阵。Adobe 文档中有很多关于此的内容,或者这里有一个很好的例子:

http://www.quasimondo.com/archives/000670.php

于 2012-08-22T15:45:31.890 回答
0

我想,你还没有完全理解 usage BitmapData.draw()

BitmapData.draw()是可能的所有 DisplayObject(Sprite, MovieClip, Shape, Text, Video...) 绘图。因为他们有一个 IBitmapDrawable。(更多信息参考 adobe 文档是最好的老师。)

如果你想实现油漆板。参考下面的代码。非常简单的油漆板。但有些可以帮助你。

尝试复制和粘贴。

import flash.display.Sprite;
import flash.events.Event;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.MouseEvent;

var isDraw:Boolean = false;
var brush:Sprite =new Sprite();
brush.graphics.beginFill(0x0000ff);
brush.graphics.drawCircle(0,0,5);
brush.graphics.endFill();

var canvasData:BitmapData = new BitmapData(600,400, false);
var canvas:Bitmap = new Bitmap(canvasData);
addChild(canvas);

stage.addEventListener(MouseEvent.MOUSE_DOWN, onDrawStart);
stage.addEventListener(MouseEvent.MOUSE_UP, onDrawStop);
stage.addEventListener(Event.ENTER_FRAME, render);

function onDrawStart(e:MouseEvent):void
{
    isDraw = true;
}

function onDrawStop(e:MouseEvent):void
{
    isDraw = false;
}

function render(e:Event):void
{
    if(!isDraw) return;

    brush.x = mouseX;
    brush.y = mouseY;

    canvasData.draw(brush,brush.transform.matrix);
}
于 2012-08-22T14:27:06.567 回答
0

graphics在绘图时使用。实际Sprite对象包含您想要的内容,因此按照您的约定,只需执行以下操作:

BitmapData.draw(Sprite);

虽然对于一个文字示例:

var mySprite:Sprite = new Sprite();
// add lines etc using mySprite.graphics

var myBitmapData:BitmapData = new BitmapData(mySprite.width, mySprite.height);
myBitmapData.draw(mySprite);
于 2012-08-22T14:15:51.173 回答