簡體   English   中英

如何使用As3將jpg圖像保存到Android手機

[英]How to save a jpg image to android phone with as3

我正在嘗試將圖像保存到我的Android手機的特定目錄中。 我以某種方式花了幾個小時,但無法正常工作。 我希望有人能幫助我理解為什么我的代碼無法正常工作,或者是否還有其他方法可以做到。

public function SaveTheImage(me:MouseEvent):void
{       
    ImageSaverBMD.draw(ImageHolder);

    var jpgEncoder:JPGEncoder = new JPGEncoder(100);
    var jpgBytes:ByteArray = jpgEncoder.encode(ImageSaverBMD);

    var myFile:File = File.documentsDirectory.resolvePath("/sdcard / DCIM / Camera/testingimage.jpg");
    var fs:FileStream = new FileStream();
    fs.open(myFile, FileMode.WRITE);
    fs.writeBytes(jpgBytes, 0, jpgBytes.length);
    fs.close();  
}

您的算法中有很多步驟可能會導致該錯誤,對於您提供的代碼,我可以做出一些猜測,但是有更好的方法。

首先嘗試以下代碼:

var s:Shape = new Shape();
s.graphics.beginFill(0);
s.graphics.drawCircle( 20, 20, 20);
s.graphics.endFill();

var bd:BitmapData = new BitmapData(40, 40, false);
bd.draw(s);

var jpgEncoder:JPGEncoder = new JPGEncoder(100);
var bytes:ByteArray = jpgEncoder.encode(bd);

var f:File = File.applicationDirectory;
var fs:FileStream = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeBytes(bytes);
fs.close();

這應該在您提供的目錄中保存80x80像素的黑色圓圈。 看看是否可行。 如果不是,請檢查權限以擁有外部存儲。

如果可行,請從頭到尾逐塊刪除代碼:

  • 刪除頂部的兩個塊,然后放置ImageSaverBMD.draw(ImageHolder)行。 也許問題出在那堂課上? 可能是位圖數據大小錯誤或繪圖矩陣轉換不正確。

  • JPGEncoder可能還可以,它是一個常用的框架,但是有時當我將其復制到源文件中時,我需要更改.as文件中的包。 您的包裹正確嗎?

  • 您在File對象中的URL包含空格,可能是您遇到的問題,請首先嘗試使用簡單的URL並查看是否可行。 可能是您嘗試使用相對URL模式導航到絕對URL的問題(對此我可能是錯的,通常我有不同的導航到文件夾的方法)。

希望有幫助!

private function export():void
{

        var today_date:Date = new Date();
        var thismonth:uint = today_date.getMonth();
        var today_time;
        var currentTime:Date = new Date();
        var minutes = currentTime.getMinutes();
        var seconds = currentTime.getSeconds();
        var hours = currentTime.getHours() * 30 + currentTime.getMinutes() / 2;

        var mnth:Array = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
        var fileName:String = (today_date.getDate()+mnth[thismonth]+today_date.getFullYear()+"_"+currentTime.hours + currentTime.minutes + currentTime.seconds+".png");
        //trace(fileName);// displays current date in United States date format
        var bmd:BitmapData = new BitmapData(board.width, board.height);//(600, 290);

        bmd.draw(board);

        var ba:ByteArray = PNGEncoder.encode(bmd);
       // var file:File = File.applicationDirectory;
        //var file:FileReference = new FileReference();
        var fs : FileStream = new FileStream();
        var targetFile : File = File.documentsDirectory.resolvePath(fileName);
        //var targetFile : File = File.applicationDirectory.resolvePath(fileName);
        fs.open(targetFile, FileMode.WRITE);
        fs.writeBytes(ba);
        fs.close();

        //file.addEventListener(Event.COMPLETE, saveSuccessful);
        saveDialog = new SaveDialog();

        addChild(saveDialog);
        test = setInterval(showMessage,2000);
        //var test = setInterval(showMessage,3000);
        saveDialog.closeBtn.addEventListener(MouseEvent.MOUSE_UP, closeSaveDialog);
        //file.save(ba, fileName);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM