2011-05-14 23 views
1

ソケット接続を使用してPCからAndroidに画像を転送しようとしています。私はPCから電話にデータを受け取ることができますが、をBitmapFactoryに渡すとnullが返されます。いつか戻ってくるイメージもありますが、必ずしもそうではありません。Android - BitmapFactory.decodeByteArrayがnullを返す

画像のサイズは40054 bytesです。私はbyteデータを保持する小さなデータプール(バッファ)を作成するので、一度に2048 bytesを受信して​​います。完全なデータを受け取った後、私はそれをBitmapFactoryに渡しています。ここに私のコードは次のとおりです。

byte[] buffer = new byte[40054]; 
byte[] temp2kBuffer = new byte[2048]; 
int buffCounter = 0; 
for(buffCounter = 0; buffCounter < 19; buffCounter++) 
{ 
    inp.read(temp2kBuffer,0,2048); // this is the input stream of socket 
    for(int j = 0; j < 2048; j++) 
    { 
     buffer[(buffCounter*2048)+j] = temp2kBuffer[j]; 
    } 
} 
byte[] lastPacket=new byte[1142]; 
inp.read(lastPacket,0,1142); 
buffCounter = buffCounter-1; 
for(int j = 0; j < 1142; j++) 
{ 
    buffer[(buffCounter*2048)+j] = lastPacket[j]; 
} 
bmp=BitmapFactory.decodeByteArray(buffer,0,dataLength); // here bmp is null 

計算

[19 data buffers of 2kb each] 19 X 2048 = 38912 bytes 
[Last data buffer] 1142 bytes 
38912 + 1142 = 40054 bytes [size of image] 

私も一度フル40054のバイトを読み込むしようとしたが、これも働いていませんでした。コードは次のとおりです。

inp.read(buffer,0,40054); 
bmp=BitmapFactory.decodeByteArray(buffer,0,dataLength); // here bmp is null 

最後にdecodeStreamでチェックしましたが、結果は同じでした。

私が間違っているのは何ですか?

おかげ

答えて

3

これはあなたの場合に役立ちますかどうかは知らないが、一般的に、あなたはあなたが求める正確なバイト数を読み取るためにInputStream.read(バイト[]、int型、int型)に依存しないでくださいために。最大値のみです。 InputStream.readのドキュメントをチェックすると、読み込んだ実際のバイト数が返されることがわかります。

通常、InputStreamからすべてのデータを読み込んで、すべてのデータを読み込んだ後に閉じようとすると、このようなことが起こります。

ByteArrayOutputStream dataBuffer = new ByteArrayOutputStream(); 
int readLength; 
byte buffer[] = new byte[1024]; 
while ((readLength = is.read(buffer)) != -1) { 
    dataBuffer.write(buffer, 0, readLength); 
} 
byte[] data = dataBuffer.toByteArray(); 

また、一定量のデータのみを読み込む必要がある場合は、事前にサイズを知っている必要があります。

byte[] data = new byte[SIZE]; 
int readTotal = 0; 
int readLength = 0; 
while (readLength >= 0 && readTotal < SIZE) { 
    readLength = is.read(data, readTotal, SIZE - readTotal); 
    if (readLength > 0) { 
     readTotal += readLength; 
    } 
} 
+0

見てください...私はそれをチェックさせて...ありがとう! –

関連する問題