3

可以TextArea使用以下属性将图像包含在控件中htmlText

ta.htmlText = '<img src="http://..."/>';

如何引用嵌入的图像

一个例子:

<mx:TextArea xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            [Embed(source='../assets/img.gif')]
            public var img:Class;
        ]]>
    </mx:Script>
    <mx:htmlText>
        <![CDATA[
            <img src="???" />
        ]]>
    </mx:htmlText>
</mx:TextArea>

升级版:

<img src='../assets/img.gif />

在本地机器上工作,但在服务器环境中它抛出:

错误 #2044:未处理的 IOErrorEvent:。文本=错误 #2035:未找到 URL。

我怎样才能解决这个问题?

4

9 回答 9

10

好的,我刚刚花了几个小时整理出来,但我已经让它在 Flash 和 Flex 中工作。

在 TextField 中显示图像

您可以将 DisplayObject 加载到 TextField<img />标记中,包括 MovieClip、Sprite 和嵌入的图像。

  • 在 Flash 或 Flex 中,如果要显示嵌入的图像,则必须创建一个扩展DisplayObject类(例如 Sprite 或 MovieClip)的包装类。

  • 确保您的文本字段足够大以包含图像。在测试期间,当我真的让 TextField 太小而无法显示整个图像时,我认为事情不正常。


闪存示例

简单的例子,所有代码都在主时间线上。

  1. 在舞台上创建一个动态的 TextField。给它一个有用的名字,我叫我txtImageTest的。

  2. 调整txtImageTest到合适的大小,例如 300x150px。

  3. 创建一个新的 MovieClip 元件并给它一个类名,例如imageClip1

  4. 在您的新剪辑中绘制一些内容或在其中放置嵌入的图像imageClip1

  5. 返回主时间轴,取消选择所有对象并在第一帧打开 Actionscript 编辑器。

  6. 在文本字段上打开多行和自动换行:

    imageClip1.wordWrap = true;
    imageClip1.multiline = true;
    imageClip1.htmlText = "<p>You can include an image in your HTML text with the &lt;img&gt; tag.</p><p><img id='testImage' src='imageClip1' align='left' width='30' height='30' hspace='10' vspace='10'/>Here is text that follows the image. I'm extending the text by lengthening this sentence until it's long enough to show wrapping around the bottom of the image.</p>"
    
  7. 保存并测试您的电影。


弹性示例

由于我们不能像在 Flash 中那样在库中创建新的 MovieClip,因此我们需要创建一个执行相同任务的新类(如果您想在库中创建新剪辑,此方法也适用于 Flash) .

这是我的黑色三角形子弹类,名为 BlackArrow.as:

// Set the correct package for you class here.
package embed
{
    import flash.display.Sprite;
    import mx.core.BitmapAsset;

    public class BlackArrow extends Sprite
    {
        // Embed the image you want to display here.
        [Embed(source='assets/embed/triangleIcon_black.png')]
        [Bindable]
        private var TriangleImage:Class;

        public function BlackArrow()
        {
            super();

            // Instantiate the embedded image and add it to your display list.
            var image:BitmapAsset = new TriangleImage();
            addChild(image);
        }

    }
}

注意:不要扩展 Bitmap(在 Flash 中)或 BitmapAsset(在 Flex 中),因为它们在 TextField 中不能正确缩放或定位选择 Sprite 或类似的东西。

下面是在 TextField 中显示此图像的类的示例:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
    width="100%" height="100%">

    <mx:Script>
    <![CDATA[
        import embed.BlackArrow;

        // You must include a variable declaration of the same type as your
        // wrapper class, otherwise the class won't be compiled into
        // the SWF and you will get an IOError.
        private var img2:BlackArrow;
    ]]>
    </mx:Script>

    <mx:Text id="txtResults1" width="100%" height="100%">
        <mx:htmlText>
        <![CDATA[<p>You can include an image in your HTML text with the &lt;img&gt; tag.</p><p><img id='testImage' src='embed.BlackArrow' align='left' hspace='10' vspace='10'/>Here is text that follows the image. I'm extending the text by lengthening this sentence until it's long enough to show wrapping around the bottom of the image.</p>]]>
        </mx:htmlText>
    </mx:Text>

 </mx:VBox>

请注意,我在src图像标记的属性中使用了完全限定的类名。


最后的笔记

于 2009-11-13T01:27:01.050 回答
3

您可以将嵌入图像指定为 htmlText 中 HTML img 标记的 src,方法是使用完全限定的类名来引用它们,您可以使用getFullyQualifiedClassName) 来确定。像这样:

public class Example
{
    [Embed(source="myImage.png")
    public static const MyImage:Class;

    public function getHTMLImg() : String
    {
        return "<img src='" + getQualifiedClassName(MyImage) + "' />";
    }
}

这比为每个可能嵌入的图像创建一个包装类要简单得多......

于 2010-07-20T02:30:48.053 回答
2

尝试:

<mx:htmlText>
        <![CDATA[
           <p>
            <img src='../assets/butterfly.gif' 
                 width='30' height='30' 
                 align='left' 
                 hspace='10' vspace='10'>
            </p>
        ]]>
     </mx:htmlText>

请参阅文档

于 2009-04-23T22:08:14.480 回答
1

我一直在寻找同样的东西。使用嵌入式图像背后的想法是防止从外部 URL 加载所述图像。所以接受的答案实际上并不能解决问题。我看过文档,他们在那里也使用了一个 URL,并且该图像不会被编译到 swf 中,而是会在运行时从服务器加载。为什么他们称该嵌入图像可能是因为它嵌入在文本中,但我正在寻找的是使用嵌入在编译代码中的图像。

为什么要在 htmlText 中使用嵌入式图像显示?因为这是在工具提示中显示图像的最简单方法(您只需覆盖默认工具提示类以设置 htmlText 而不是文本,并将其设置为 TooltipManager 中的默认工具提示类)。在我的搜索中,我发现了这个:http ://groups.google.com/group/flex_india/browse_thread/thread/cf0aa62afaae3fdc/b21f462f8d5da117?pli=1 。尚未对其进行测试,我想问题将出现在确定该链接 ID 上。当我有它们时,我会回来提供更多细节。

于 2009-12-31T11:02:55.607 回答
1

Sly_cardinal 写了一个非常有用的答案。非常感谢他!我半天都解决不了这个问题。Sly_cardinal 注意到,如果你这样做 getQualifiedClassName(嵌入位图)图像被插入的文本不正确只是到左上角。Sly_cardinal 提供了一个包装类。

我想附加一个他的答案

一个新的类包装器 ImageWrapper.as ->

package 
{
import flash.display.Bitmap;
import flash.display.Sprite;
public class ImageWrapper extends Sprite{
    public static var img:Class;
    public function ImageWrapper() {
        var bitmap:Bitmap = new img();
        addChild(bitmap);
    }
}
}

代码中的调用:

[Embed(source = "img/MyImg.png")] var _MyImg:Class;
ImageWrapper.img = _MyImg;
tf.htmlText = "My text, and my image <img src='ImageWrapper'>";

就是这样。谢谢!

于 2013-06-19T06:44:27.740 回答
0

尝试

src='../assets/img.gif'

取自:使用 htmlText 属性

于 2009-04-23T22:06:35.390 回答
0

使用 src='assets/img.gif' 但您必须在部署应用程序 SWF 的服务器目录中创建一个 assets 目录,并将您的 img.gif 文件放在那里。在 html 中,它正在寻找与 SWF 文件相关的文件。

这将允许您在开发和部署位置使用相同的文件和位置。

于 2009-09-09T03:50:42.013 回答
0

它可以在 localhost 上运行,因为您在机器上有图像,因此您可以加载它。如果要嵌入它,它不会上传到服务器上的指定目录中,而是包含在 .SWF 文件本身中。在生产输出的相应位置上传图像(浏览它以从您的源文件文件夹上传)。

于 2009-09-15T08:30:09.223 回答
0

小伙伴们不用再为难自己了!从现在开始,导入 MovieClip 就不是什么大问题了!借助名为 TextArea 的新类(不是 TextArea 组件,它是一个 OOP 类,是原始 TextField 类的扩展)。

我们不再需要嵌入或库,我们可以在任何地方使用 TextArea 而不是 Textfield,这使我们能够导入我们自己的 SWF 文件,例如视频播放器、说话的头像或任何其他文本行。

它有很多更多的功能,并不特别局限于这个问题。查看www.doitflash.com了解更多信息,该网站提供平台,下载也是免费的:)

于 2011-11-04T10:03:04.440 回答