Sunday, December 9, 2007

MDM + as3corelib : 存檔寫 log (文字檔 + 圖檔)

// MDM Version (http://www.multidmedia.com/)
// encoder from as3corelib (http://code.google.com/p/as3corelib/)

/*

如果你要它存 PNG 結果掛掉的話,有可能是因為 轉成 png 以後太大了

(記憶體佔用太多,血淋淋的經驗,死的不明不白,完全看不出來為什麼4 張只存了一張以後好像就沒動靜了)
可以先改用 JPG 存檔並調整他的壓縮比例 JPGEncoder(60),這樣存的檔案體積會比較小,比較不容易掛

*/

import mdm.*;
import com.adobe.images.PNGEncoder;
import com.adobe.images.JPGEncoder;


//Declare global variables

var fileFolderPath:String; // 資料夾的位置
var fileName:String; // 文字檔(log)檔名
var uniqueName:String;

// 用 Flash CS3 的話一定要先用這個指令來 Initiate
mdm.Application.init(this,OnInit); 

// 可接收關掉程式時的 Event
mdm.Application.enableExitHandler();


function OnInit():void {
OpenFile();
}

function OpenFile() {
var myDate:Date = new Date();
var folderExists:Boolean;

uniqueName = myDate.toDateString() + " - "
+ myDate.hours
+"_" + myDate.minutes
+"_" + myDate.seconds ;

fileFolderPath = mdm.System.Paths.desktop + "Record-" + uniqueName + "\\";
folderExists = mdm.FileSystem.folderExists(fileFolderPath);
if( folderExists == true ){
; // 資料夾已經存在
}
else{
// 資料夾不存在就create一個
mdm.FileSystem.makeFolderUnicode(fileFolderPath);
}

// log 檔名
fileName = "Log.txt";

// 在第一行寫入試著在第一行寫入 "#Log\n"
mdm.FileSystem.saveFileUnicode(fileFolderPath + fileName, "#Log\n");

}

// 要寫 log 的時候就把 string pass 給 WriteLog(your_string)
function WriteLog(msg:String) {
appendFile(msg);
}

function appendFile(eMsg:String) {

mdm.FileSystem.appendFileUnicode(fileFolderPath + fileName, eMsg);
}

// 回傳畫著這個 MovieClip 的 BitmapData
function mc2Bitmap(mc1:MovieClip):BitmapData {
var myBitmap:BitmapData = new BitmapData(mc1.width, mc1.height, true, 0);
myBitmap.draw(mc1);
return myBitmap;
}

// 將 MovieClip 轉成 名為 fileName.png 的 PNG 圖檔

function MovieClipToPNG( target_mc:MovieClip, fileName:String):void {
BitmapDataToPNG( mc2Bitmap(target_mc) , fileName );
}

// 將 MovieClip 轉成 名為 fileName.jpg 的 JPG 圖檔

function MovieClipToJPG( target_mc:MovieClip, fileName:String):void {

BitmapDataToJPG( mc2Bitmap(target_mc) , fileName );
}


// 將 BitmapData 轉成 名為 fileName.png 的 PNG 圖檔

function BitmapDataToPNG( targetB:BitmapData, fileName:String ):void {

var baString:String;
var bpd:BitmapData = targetB;
var ba:ByteArray;
var resultString:String;

ba = PNGEncoder.encode(bpd);

var g:Number;
g = 0;

resultString = ba[0];

// MDM 的存檔格式(由 | 分隔)
for (g = 1; g < ba.length; g++) {
resultString += "|" + ba[g];
}

mdm.FileSystem.BinaryFile.setData (resultString);
mdm.FileSystem.BinaryFile.writeData( root["fileFolderPath"] + fileName + ".png" );


}


// 將 BitmapData 轉成 名為 fileName.jpg 的 JPG 圖檔

function BitmapDataToJPG( targetB:BitmapData, fileName:String )
:void {

var baString:String;
var bpd:BitmapData = targetB;
var ba:ByteArray;
var resultString:String;

var jpgEncorder:JPGEncoder = new JPGEncoder(60);

ba = jpgEncorder.encode (bpd);

var g:Number;
g = 0;

resultString = ba[0];

// MDM 的存檔格式(由 | 分隔)
for (g = 1; g < ba.length; g++) {
resultString += "|" + ba[g];
}

mdm.FileSystem.BinaryFile.setData(resultString);
mdm.FileSystem.BinaryFile.writeData( root["fileFolderPath"] + fileName + ".jpg" );


}

1 comment:

Anonymous said...

你好,我的问题是保存的这种binaryfile如何读取并还原呢?thanks