ll_koba_llさんがコメントをくれたので、試してみた。4KBになりました。ただ、やっぱりBitmapそのままだと回転するときにギザギザになるからスムージングかけたんだけど、そうするとそうするでぼやけるなぁと。まあ、でも4KBだし。前作ったやつ(※3.4MB)のほうが描写はきれいだけど、、、。でも重さ的に使えないかなぁ。


var b:BitmapData = new BitmapData(tf.width, tf.height);
b.draw(tf);
var bp:Bitmap = new Bitmap(b,"never",true);
var d:DisplayObject = this.targetContainer.addChild(bp);

d.blendMode = BlendMode.MULTIPLY;

Bitmapの処理あんまよく理解してなかったなぁ。pixelSnappingとか初めて知ったし。テキストフィールドごとBitmapにしてしまうので、背景がついてしまう。BlendModeを変えて透けるようにしました。以下ソースの一部。。。メモです。だから、来週のAS勉強会の準備をするんだってば。


package net.ra66it.draw{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.display.DisplayObjectContainer;
	import flash.display.Graphics;

	//カスタムクラス
	import net.ra66it.xml.XMLloader;
	import net.ra66it.draw.GraphXmlAnalytic2;
	import com.yokozunat.utils.BitmapFilterUtil;
	import com.yokozunat.draw.Ball;

	//text
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.text.TextFormatAlign;
	import flash.text.TextFieldAutoSize;
	import flash.text.AntiAliasType;

	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.BlendMode;

	import flash.system.Capabilities;

	public class Graph extends Sprite {
		private var xmlLoader:XMLloader;
		private var mainXml:XML;
		private var targetContainer:DisplayObjectContainer;

		//配列
		private var newsIDAry:Array;
		private var newsTitleAry:Array;
		private var newsSiteURLIDAry:Array;
		private var newsAccessCountAry:Array;

		//描画
		var g:Graphics;
		function Graph(xmlUrl:String, container:DisplayObjectContainer) {
			this.targetContainer = container;

			//UTF-8だからtrue
			var isUnicode:Boolean = true;
			//XMLファイルを読み込む
			this.xmlLoader = new XMLloader(xmlUrl, isUnicode);
			this.xmlLoader.addEventListener(XMLloader.LOAD_COMPLETE, onXMLloaded);
		}
		/**============================================================================================
		* XML読み込み完了
		============================================================================================*/
		private function onXMLloaded(event:Event):void {
			//XMLオブジェクトを受け取る
			this.mainXml = this.xmlLoader.getXML();
			var graphXmlAnalytic2:GraphXmlAnalytic2 = new GraphXmlAnalytic2();
			this.newsIDAry = graphXmlAnalytic2.getNewsIdAry(this.mainXml);
			this.newsTitleAry = graphXmlAnalytic2.getNewsTitleAry(this.mainXml);
			this.newsSiteURLIDAry = graphXmlAnalytic2.getSiteURLIDAry(this.mainXml);
			this.newsAccessCountAry = graphXmlAnalytic2.getAccessCountAry(this.mainXml);

			setDrawGraph();
		}
		private function setDrawGraph():void {
			var tmpSprite:Sprite = new Sprite;
			g=tmpSprite.graphics;
			//g.lineStyle(1,0x6600CC,1);
			g.beginFill(0xcccc66);
			g.moveTo(10,400);
			
			var n:Number=0;
			var lastX:Number;
			
			for (var i:int=0; i < newsIDAry.length; i++) {
				
				n=this.newsAccessCountAry[i]/180;
				g.lineTo(i * 1 * 400/newsIDAry.length+10, 400 - n);
				
				var myBall:Ball = new Ball(5,0x333300);
				myBall.x = i * 1 * 400/newsIDAry.length+10;
				myBall.y = 400 - n;
				tmpSprite.addChild(myBall);
				
				setText(myBall.x,myBall.y,this.newsTitleAry[i]);

			}
			g.lineTo((i-1) * 1 * 400/newsIDAry.length+10, 400);
			g.lineTo(10,400);
			g.endFill();

			var filter:BitmapFilterUtil = new BitmapFilterUtil;

			filter.getBevel(tmpSprite);
			filter.getDropShadow(tmpSprite);

			this.targetContainer.addChild(tmpSprite);
		}
		function setText(X:Number, Y:Number, Title:String):void {
			var tf:TextField = new TextField();
			
			//tf.embedFonts = true;
			tf.autoSize = TextFieldAutoSize.LEFT;
			tf.antiAliasType = AntiAliasType.ADVANCED;
			tf.defaultTextFormat = getTextFormat(10);
			tf.selectable = false;
			tf.mouseEnabled = true;
			tf.multiline = true;
			tf.wordWrap = true;
			tf.width = 400;
			tf.height = 300;
			//tf.x = X;
			//tf.y = Y-10;

			tf.text = "";

			for (var i:int = 0; i<30; i++) {
				tf.text = Title;
			}
			//tf.rotation = -70;
			//this.targetContainer.addChild(tf);
			var b:BitmapData = new BitmapData(tf.width, tf.height);
			b.draw(tf);
			var bp:Bitmap = new Bitmap(b,"never",true);
			var d:DisplayObject = this.targetContainer.addChild(bp);
			
			d.x = X;
			d.y = Y-10;
			d.rotation = -70;
			d.blendMode = BlendMode.MULTIPLY;
		}
		private function getTextFormat(fontSize:Number):TextFormat {
			var format:TextFormat = new TextFormat();
			format.size = fontSize;
			format.leading = fontSize*0.5;
			format.color = "0x333300";
			var whatOs:String = Capabilities.os;
			if (whatOs.slice(0,3) == "Mac") {
				format.font = "ヒラギノ角ゴ Pro W6";
			} else if (whatOs.slice(0,3) == "Win") {
				format.font = "MS Pゴシック";
			} else {
				format.font = "sans-serif";
			}
			return format;
		}
	}
}

tags:as3 asメモ 


related links

投稿

名前
 
メールアドレス
 
URL
 
タイトル
コメント
パスワード
Cookieに保存

trackback

http://ra66it.net/trackback/blog/studylog/entry-721.html

http://ra66it.net/blog/studylog/entry-721.html