2013-04-18 57 views
0

我正在做一個拖放Flash遊戲,放置所有可移動的部分後,我想要一個按鈕,允許一個人保存整個舞臺的屏幕截圖。AS3舞臺屏幕截圖到硬盤保存

我搜索了不同的樣本,無法獲取此代碼的工作。

這裏是AS3

snap_btn.addEventListener(MouseEvent.CLICK, snapShot); 

function snapShot(evt:MouseEvent):void 
{ 

import com.adobe.images.JPGEncoder; 

var jpgSource:BitmapData = new BitmapData (stage.width, stage.height); 
jpgSource.draw(stage); 



var jpgEncoder:JPGEncoder = new JPGEncoder(85); 
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource); 

var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream"); 
var jpgURLRequest:URLRequest = new URLRequest("jpg_encoder_download.php?name=sketch.jpg"); 
jpgURLRequest.requestHeaders.push(header); 
jpgURLRequest.method = URLRequestMethod.POST; 
jpgURLRequest.data = jpgStream; 
navigateToURL(jpgURLRequest, "_blank"); 


} 

的PHP

<?php 
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) 
{ 
// get bytearray 
$jpg = $GLOBALS["HTTP_RAW_POST_DATA"]; 

// add headers for download dialog-box 
header('Content-Type: image/jpeg'); 
header("Content-Disposition: attachment; filename=".$_GET['name']); 
echo $jpg; 
} 
?> 

我最終得到這個工作,我擺脫了PHP的

snap_btn.addEventListener(MouseEvent.CLICK, snapShot); 

function snapShot(evt:MouseEvent):void 
{ 

import com.adobe.images.JPGEncoder; 



var jpgSource:BitmapData = new BitmapData(stage.width, stage.height); 
jpgSource.draw(stage); 
var jpgEncoder:JPGEncoder = new JPGEncoder(80); 
var imgByteData:ByteArray = jpgEncoder.encode(jpgSource); 
file = new FileReference(); 

file.save(imgByteData, "Haven_Big_Dream_Map.jpg"); 




} 
+1

我不太熟悉PHP,但它看起來像你用它來保存文件。爲什麼不使用'FileReference'來通過Flash給用戶一個保存對話框?不能幫助您使用JPG編碼,但如果它是由於PHP的緣故,您可以使用FileReference –

+0

絕對做到這一點很酷謝謝你的提示我使用這個代碼 'snap_btn.addEventListener(MouseEvent。 CLICK,snapShot); function snapShot(evt:MouseEvent):void { import com.adobe.images.JPGEncoder; var jpgSource:BitmapData = new BitmapData(stage.width,stage.height); jpgSource.draw(stage); var jpgEncoder:JPGEncoder = new JPGEncoder(80); var imgByteData:ByteArray = jpgEncoder.encode(jpgSource); file = new FileReference(); file.save(imgByteData,「imagename.jpg」); }」 –

+0

只是讓你知道,所有的進口量應一類的聲明之外,或在CS5你的代碼的頂部來完成。在功能內導入是不好的做法,可能會導致問題 –

回答

1

我就重寫埃文的回答。

使用FileReference在BitmapData上使用adobe.corelib中的JPEGEncode或PNGEncode之後保存文件。請記住,舊版本的FlashPlayer(< 10)不會將文件保存在驅動器上!