2013-07-15 1 views
0

로 변환 :얻을 방법의 BitmapData의 크기는 내가의 BitmapData 객체가 BYTEARRAY로 변환 한이 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를 가져와야합니다. 어떻게해야합니까?

편집 :

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

아직도 팁을 기다리고 :

된 ByteArray를 기반으로의 BitmapData 폭과 높이를 확인할 방법이 없었다, 나는이 768px X가 1024px에 내가 촬영 한 모든 사진을 변환하기로 결정 gettearray에서 너비 x 높이를 가져 오는 방법은 getPixels bitmapdata 방법입니다.

답변

0

함께 액세스 할 수있는 이미지를로드하는 Loader 클래스를 사용할 수 있습니다 :) 폭과 높이를 모으는 추가 값으로 bytearray를 확장하기 만하면됩니다.

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

시 : 생성 및 압축 파일을 읽는에는 getPixels에 의해 생성 된 배열은 비트 맵의 ​​높이 또는 폭에 대한 정보를 포함하지 않는 바이트는, 그것의

1

그런 다음 당신이 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); 
} 
+0

내 파일을 JPG로 인코딩되지 않은, 그것은 단지 원시의 BitmapData 된 ByteArray가 포함되어 있습니다. 그래서로드 된 파일은 그 내용에 비트 맵을 제공하지 않습니다 : ( – SzRaPnEL

+0

Mayby 원하는 크기의 bytearray로 bytearray를 변환하는 방법이 있습니까? bytearrays 어딘가에 대해 들었지만, 사용법을 모릅니다. – SzRaPnEL

+0

이 http : //help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Loader.html#loadBytes()를 사용하여 바이트 배열을 'Loader'에로드합니다. –

0

PNG/JPG를 만들기보다 훨씬 빠릅니다 단순히 "각 픽셀에 대한 부호없는 정수 (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));