2012-01-10 3 views
2

Noob в AS3 растрового материала ...AS3 Преобразование ByteArray в Bitmap

, когда я пытаюсь делать следующий код он не

bmd.setPixels (bmd.rect, decodeValue);

и сообщение об ошибке: Ошибка: Ошибка # 2030: Был обнаружен конец файла.

Ситуация заключается в том, что у меня есть изображение как двоичное в базе данных путем преобразования byteArray, и теперь я хотел бы получить его и преобразовать обратно в изображение.

Просто, чтобы очистить это ByteArray, нужно поместить в растровое изображение, а затем вы можете добавить в фильм клип правильно?

import flash.display.Loader; 
import flash.net.URLRequest; 
import flash.display.Bitmap; 
import flash.display.BitmapData; 
import com.dynamicflash.util.Base64; 

var loader:Loader; 
var req:URLRequest; 
var orig_mc:MovieClip; 
var copy_mc:MovieClip; 

function loaderCompleteHandler(evt:Event) { 
    //swap data 
    var ldr:Loader = evt.currentTarget.loader as Loader; 
    var origImg:Bitmap = (ldr.content as Bitmap); 
    var origBmd:BitmapData = origImg.bitmapData; 
    trace(origImg.bitmapData); 
    trace(origImg.width); 
    trace(origImg.height); 

    //Convert image byteData into Base64 String 
    var byteArray:ByteArray = new ByteArray(); 
    byteArray.writeObject(origBmd); 
    var encoded:String = Base64.encodeByteArray(byteArray); 
    trace("\nENCODED:\n" + encoded); 
    var decoded:ByteArray = Base64.decodeToByteArray(encoded); 
    trace("\nDECODED:\n" + decoded.toString()); 

    // convert base64 string back into movieclip 
    var newBmd:BitmapData = new BitmapData(origImg.width,origImg.height,"true",0xFFFFFFFF); 
    newBmd.setPixels(origBmd.rect, decoded);**// THIS THROWS AN " Error #2030: End of file was encountered."** 
    var image:Bitmap = new Bitmap(newBmd, "auto", true); 
    copy_mc.addChild(image); 
    copy_mc.x = origImg.width; 
} 

loader = new Loader(); 
req = new URLRequest("C:\\Data\\cutcord.jpg"); 
loader.load(req); 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler); 
// movieclip to display original image 
orig_mc = new MovieClip(); 
orig_mc.addChild(loader); 
addChild(orig_mc); 
// movieclip to display image copy 
copy_mc = new MovieClip(); 
addChild(copy_mc); 

Anyone can help would be very appreciated :) 

ответ

5

попробовать этот код:

var rect:Rectangle = new Rectangle(0,0,img.widht,img.height); 
    var byteArray:ByteArray = bitmapData.getPixels(rect); 
    var encoded:String = Base64.encodeByteArray(byteArray); 

    var decoded:ByteArray = Base64.decodeToByteArray(encoded); 
    decoded.position = 0; 
    var newBmd:BitmapData = new BitmapData(rect.width,rect.height,true,0xFFFFFFFF); 

    newBmd.setPixels(rect, decoded); 


    var image:Bitmap = new Bitmap(newBmd, "auto", true); 
    addChild(image); 

в любом случае, ваша идея магазина строки в сервере ISNT слишком хорошо ... Почему вы не отправить ByteArray, а не строки? Вы также можете кодировать bitmapData для JPG или PNG, а затем отправлять байты в php.

3

, так как это изображение, вы его в BitmapData, скажем, «myBmp» ... затем использовать следующий, чтобы извлечь все данные из BitmapData:

var bytes:ByteArray = myBmp.getPixels(myBmp.rect); 

и следующее написать:

myBmp.setPixels(myBmp.rect, bytes); 

к сведению, что только исходный 32-битный пиксельный данные хранятся в ByteArray, без сжатия, ни размеры исходного изображения.

для сжатия, вы должны обратиться к кораблибу.

+0

Я делаю именно то, что вы поместили, но я был брошен с этой ошибкой: Ошибка: Ошибка # 2030: был обнаружен конец файла. это потому, что мой byteArray слишком велик? – Bruce

+0

90068 - это длина, когда я делаю трассировку btw – Bruce

+0

Есть ли способ рассчитать/получить оригинальные размеры от такого bytearray? – SzRaPnEL

Смежные вопросы