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