0

我将位图数据对象转换为字节数组:

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

我将其保存为 .jpg 文件以供以后使用:

writeStream.writeBytes(bytes, 0, bytes.bytesAvailable);

现在,当我想检索数据时:

var file:File = File.documentsDirectory.resolvePath("data/"+photoNameVec[loadCounter]);         
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);
var fileContent:ByteArray = new ByteArray;
fileStream.readBytes(fileContent);
fileStream.close();         
var bmpData:BitmapData = new BitmapData(XXX, YYY);
bmpData.setPixels(bmpData.rect, fileContent);
addChild(new Bitmap(bmpData));

但我需要得到准确的 XXX 和 YYY 才能正确显示图形。我怎样才能做到这一点?

编辑:

由于无法根据 bytearray 确定位图数据的宽度和高度,我决定将我拍摄的所有图片转换为 1024px x 768px:

var bitmapDataA:BitmapData = new BitmapData(mpLoaderInfo.width, mpLoaderInfo.height);
var matrix:Matrix = new Matrix();
matrix.scale( 1024 / mpLoaderInfo.width, 768 / mpLoaderInfo.height);
var bitmapDataB:BitmapData = new BitmapData(1024,768);
bitmapDataB.draw(mpLoaderInfo.content, matrix, null, null, new Rectangle(0,0,1024,768), true);

仍在等待有关从位图数据的getPixels方法创建的字节数组获取宽度 x 高度的提示。

4

3 回答 3

1

您可以使用一个Loader类来加载图像,然后您可以访问它width/heightBitmapData

var file:File = File.documentsDirectory.resolvePath("data/"+photoNameVec[loadCounter]);
var myImage:BitmapData;

var loader:Loader = new Loader();
var urlReq:URLRequest = new URLRequest(file.url);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
loader.load(urlReq);

function loaded(e:Event):void
{
    var bmp:Bitmap = e.target.content as Bitmap;
    myImage = bmp.bitmapData;
    trace(myImage.width, myImage.height);
}

这里是loadBytes

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, loaded);
loader.loadBytes(yourByteArray);

function loaded(e:Event):void
{
    var bmp:Bitmap = e.target.content as Bitmap;
    myImage = bmp.bitmapData;
    trace(myImage.width, myImage.height);
}
于 2013-07-15T20:35:07.707 回答
0

我想这是最合适的解决方案:) 只需使用额外的值扩展字节数组,我将从中收集宽度和高度。

http://www.ghostwire.com/blog/archives/as3-serializing-bitmaps-storing-bitmapdata-as-raw-binarybytearray/

Ps.:创建和读取未压缩文件比制作 png/jpg 快得多

于 2013-07-15T23:09:39.820 回答
0

getPixels 创建的字节数组不包含有关位图高度或宽度的任何信息,它只是“每个像素的无符号整数(32 位未相乘的像素值)”。

因此,您需要将其编写为需要编码(因此需要时间)的图像格式(PNG/JPG),或者在写入文件之前简单地将宽度和高度添加到字节数组中。

例如在您的流作家中:

writeStream.writeInt( bitmapDataA.width );
writeStream.writeInt( bitmapDataA.height );
writeStream.writeBytes(bytes, 0, bytes.bytesAvailable);

然后在加载时:

var file:File = File.documentsDirectory.resolvePath("data/"+photoNameVec[loadCounter]);         
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.READ);

var w:int = fileStream.readInt();
var h:int = fileStream.readInt();

var fileContent:ByteArray = new ByteArray;
fileStream.readBytes(fileContent);
fileStream.close();         

var bmpData:BitmapData = new BitmapData( w , h);

bmpData.setPixels(bmpData.rect, fileContent);
addChild(new Bitmap(bmpData));
于 2013-07-16T11:53:13.430 回答