如何在Flex 3中的图形上放置图像(例如PNG)?

时间:2008-11-04 09:58:29

标签: flex actionscript-3

我是Flex的新手,我正在尝试编写一个简单的应用程序。我有一个带图像的文件,我想在图形上显示这个图像。我该怎么做呢?我尝试了[嵌入] - 并将其作为子项添加到拥有图形的组件中,但是我得到了“类型强制失败:无法将...转换为mx.core.IUIComponent”错误。

5 个答案:

答案 0 :(得分:7)

在我的头脑中,我可以想到两件可能对你有帮助的事情(取决于你想要达到的目的):

如果您只想显示已嵌入的图片,可以在舞台上添加Image组件,并将其source的值设置为图形资源(Class你正在嵌入:

[Bindable]
[Embed(source="assets/image.png")]
private var MyGfx:Class;

myImage.source = MyGfx;

如果您确实要位图绘制到Graphics对象上,可以使用beginBitmapFill()方法执行此操作:

[Bindable]
[Embed(source="assets/image.png")]
private var MyGfx:Class;

var myBitmap:BitmapData = new MyGfx().bitmapData;
myGraphics.beginBitmapFill(myBitmap);
myGraphics.endFill();

您可能会发现Adobe网站上的Flex Quick Starts文章很有用,尤其是"Embedding Assets"部分。

答案 1 :(得分:7)

接受的答案是不完整的,因为如果没有致电drawRect(),将不会提取任何内容。我已经用这种方式实现了它并且它有效。请注意,我添加了矩阵转换,否则必须在0,0处绘制图像,否则会被错误地剪裁。

[Embed(source='assets/land-field.png')] 
private var ImgField:Class; 
private var field:BitmapData = new ImgField().bitmapData;

public static function drawImage(g:Graphics, image:BitmapData, x:int, y:int):void {
  var mtx:Matrix = new Matrix();
  mtx.translate(x, y);
  g.beginBitmapFill(image, mtx, false, false);
  g.drawRect(x, y, image.width, image.height);
  g.endFill();
}

答案 2 :(得分:0)

您还可以通过将常规AS3显示对象添加到rawChildren集合(myComponent.rawChildren.addChild(myPNG))来将常规AS3显示对象添加到Flex组件,但这有点像黑客攻击。

如果您是通过myDisplayObject.graphics尝试这样做,请发布一些示例来源。

答案 3 :(得分:0)

既然你是初学者,这是一个简单的方法。

在您的应用程序中,切换到“设计视图”。

将“图像组件”从“组件面板”拖动到主“应用程序画布”上。

调整画布上的图像大小并将其保留为选中状态。在右侧的“属性”面板中,单击“源”字段上的“文件夹”按钮。

选择你的形象。如果将图像放在项目的文件夹中,它将包含在您的构建文件夹中。

然后看一下源视图。您将看到反映您已完成的MXML代码。您也可以手动更改此设置。 source =“blah.png”部分也可以指向远程URL。

答案 4 :(得分:0)

好的还有另一种方法可以做到这一点 你可以关注http://livedocs.adobe.com/flex/3/langref/flash/display/Graphics.html#includeExamplesSummary 并使用beginBitmapFill()方法查看示例非常有用!