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>

UPD:

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

ローカルマシンで動作しますが、サーバー環境では次のようにスローされます。

エラー#2044:未処理のIOErrorEvent:。text =エラー#2035:URLが見つかりません。

どうすればこれを修正できますか?

4

9 に答える 9

10

OK、これを整理するのに数時間費やしましたが、Flash と Flex で動作するようになりました。

TextField に画像を表示する

<img />MovieClip、Sprite、埋め込み画像などのTextField タグに DisplayObject をロードできます。

  • Flash または Flex で埋め込み画像を表示する場合は、クラスを拡張するラッパー クラスを作成する必要がありますDisplayObject(Sprite または MovieClip など)。

  • テキスト フィールドが画像を含むのに十分な大きさであることを確認してください。テスト中に、TextField が小さすぎて画像全体を表示できないと、うまくいかないと思いました。


フラッシュの例

簡単な例です。すべてのコードはメイン タイムラインにあります。

  1. ステージ上に動的 TextField を作成します。便利な名前を付けてください。私は mine と呼んでいtxtImageTestます。

  2. 300x150pxtxtImageTestなどの適切なサイズにサイズ変更します。

  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 で行ったようにライブラリで新しいムービークリップを作成することはできないため、同じタスクを実行する新しいクラスを作成する必要があります (ライブラリで新しいクリップを作成する場合、この方法は 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 で適切にスケーリングまたは配置されないためです。スプライトまたは類似のものを選択します。

この画像を 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>

srcimage タグの属性で完全修飾クラス名を使用していることに注意してください。


ファイナルノート

于 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

Sly_cardinal は非常に役立つ回答を書きました。彼に感謝します!この問題を半日解けませんでした。Sly_cardinal は、そうすると getQualifiedClassName (embed bitmap) 画像がテキストに正しく挿入されず、左上隅だけに挿入されることに気付きました。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 に答える
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 に答える
0

マシン上にイメージがあるため、ローカルホストで機能し、ロードできます。埋め込む場合は、サーバーの指定されたディレクトリにアップロードされるのではなく、.SWFファイル自体に含まれます。本番出力の対応する場所に画像をアップロードします(ソースファイルフォルダーからアップロードするために参照します)。

于 2009-09-15T08:30:09.223 に答える
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 に答える