Arrays 如何获取转换为bytearray的位图数据的大小

Arrays 如何获取转换为bytearray的位图数据的大小,arrays,actionscript-3,bitmapdata,Arrays,Actionscript 3,Bitmapdata,我已将bitmapdata对象转换为bytearray: var bytes:ByteArray = bitmapDataA.getPixels(bitmapDataA.rect); 我将其另存为.jpg文件以备以后使用: writeStream.writeBytes(bytes, 0, bytes.bytesAvailable); 现在,当我要检索数据时: var file:File = File.documentsDirectory.resolvePath("data/"+photoNa

我已将bitmapdata对象转换为bytearray:

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);

仍在等待从bitmapdata的getPixels方法创建的bytearray获取宽度x高度的提示。

您可以使用
加载程序
类加载图像,然后可以访问图像的
宽度/高度
bitmapdata

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);
}

我想这是最合适的解决方案:) 简单地用额外的值展开bytearray,我将从中收集宽度和高度


注:创建和读取未压缩文件要比生成png/jpg快得多。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));

我的文件未编码为jpg,它只包含原始bitmapdata bytearray。因此加载的文件在其内容中不提供位图:(也许有一种方法可以将bytearray转换成所需大小的bytearray?我在某个地方听说过bytearray转换,但不知道如何使用它。你可以使用它将字节数组加载到
加载程序
中。问题是myPhoto001.jpg文件不是.jpg文件,它只有.jpg格式的字母,但它包含原始位图数据转换为bytearray。我不希望它是.jpg以防止质量损失。当bytes=bitmapDataA.getPixels(bitmapDataA.rect)时,是否可以简单地获取字节的宽度和高度,无法访问bitmapDataA?一旦将其转换为字节数组,就无法仅从bytearray了解其尺寸。该信息与图像数据一起以文件格式存储。如果不想失去质量,请另存为png。