ペイント

by matubo
♥5 | Line 129 | Modified 2009-10-15 16:34:09 | MIT License
play

ActionScript3 source code

/**
 * Copyright matubo ( http://wonderfl.net/user/matubo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/GaIj
 */

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
	xmlns:mx="http://www.adobe.com/2006/mxml"
	initialize="initData();"
	mouseUp="Mouse_Up(event)"
>

<mx:Script>
<![CDATA[
	import mx.controls.*;
	import mx.events.*; 
	import mx.formatters.*;
	import mx.graphics.codec.*;
	import flash.external.*;

	private var m_status:Boolean = false;
	private var cvs_thickness:Number = 4;
	private var bmp:BitmapData = null;
	private var cmd_cnt:Number = 0;
	private var img_name:String = "";

	private var post:URLLoader;

	// アプリケーションの初期化
	public function initData():void {

		post = new URLLoader();

		// IO エラー
		post.addEventListener(IOErrorEvent.IO_ERROR, systemError);

		// 処理終了
		post.addEventListener(Event.COMPLETE, completeUpload);

		// 初期色
		cp.selectedColor = 0x000000;

	}

	// マウスダウン
	public function Mouse_Down(e:flash.events.MouseEvent):void {
		m_status = true;
		e.currentTarget.graphics.moveTo(e.localX,e.localY);
	}

	// マウスアップ
	public function Mouse_Up(e:flash.events.MouseEvent):void {
		m_status = false;
	}

	// 画像に変換
	public function Convert_bmp():void {
		if ( bmp == null ) {
			bmp = new BitmapData(350, 350);
		}

		bmp.draw(cvs);
		cvs.graphics.clear();
		cvs.graphics.beginBitmapFill(bmp); 
		cvs.graphics.drawRect(0, 0, bmp.width, bmp.height); 
		cvs.graphics.endFill(); 
	}

	// マウス移動
	public function Mouse_Move(e:flash.events.MouseEvent):void {

		if ( m_status ) {
			cvs_thickness = Number(lw.selectedItem.data);
			e.currentTarget.graphics.lineStyle(
			cvs_thickness,
			cp.selectedColor,
			100
			);
			e.currentTarget.graphics.lineTo(e.localX,e.localY);
			cmd_cnt++;
			if ( cmd_cnt > 20 ) {
				cmd_cnt = 0;
				Convert_bmp();
			}
			e.currentTarget.graphics.moveTo(e.localX,e.localY);
		}
	}
	
	// 削除
	private function clear():void
	{
        cvs.graphics.clear();
	}


	// Canvas を画像化してアップロード
	private function uploadImage():void
	{
		var bmp:BitmapData = new BitmapData(cvs.width, cvs.height);
		bmp.draw(cvs);
		var enc:PNGEncoder = new PNGEncoder();
		var png:ByteArray = enc.encode(bmp);

		var req:URLRequest = new URLRequest("./savePng.php");
		req.data = png;
		req.method = URLRequestMethod.POST;

		post.load(req);
		bmp.dispose();

	}

	// 処理終了
	private function completeUpload(event:Event):void {
		var result:Array = (post.data).split(/\s/);
		Alert.show(post.data);
		img_name = result[0];
	}
			
	// IO エラー
	private function systemError(event:IOErrorEvent):void{
		Alert.show("IOError:" + event.text);
	}
]]>
</mx:Script>

<mx:Panel
	title="ペイント(^ω^)"
	horizontalAlign="center"
>

    <mx:HBox>
        <mx:Label text="色:"/>
        <mx:ColorPicker id="cp" showTextField="false" />
        <mx:Label text="太さ:"/>
        <mx:HorizontalList id="lw" selectedIndex="2" width="180" height="25" columnCount="5">
    		<mx:dataProvider>
    		    <mx:Array>
    		    	<mx:Object label="極細" data="0" />
    		    	<mx:Object label="細い" data="2" />
    		    	<mx:Object label="普通" data="4" />
    		    	<mx:Object label="太い" data="6" />
    	    		<mx:Object label="極太" data="10" />
    	    	</mx:Array>
    	    </mx:dataProvider>
        </mx:HorizontalList>
        <mx:Button
    		id="btn_S"
    		label="保存"
    		click="uploadImage()"
    	/>
    	        <mx:Button
    		id="btn_C"
    		label="クリア"
    		click="clear()"
    	/>
    </mx:HBox>
    <mx:Canvas
	    id="cvs"
	    borderStyle="solid"
    	width="350"
    	height="350"
    	top="50"
    	mouseDown="Mouse_Down(event)"
    	mouseUp="Mouse_Up(event)"
    	mouseMove="Mouse_Move(event)"
    	mouseOut="Mouse_Move(event)"
    >
    </mx:Canvas>
</mx:Panel>
</mx:Application>