ペイント
♥5 |
Line 129 |
Modified 2009-10-15 16:34:09 |
MIT License
archived:2017-03-08 08:08:55
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>