2011-09-15 9 views
2

として表示するために、ARGB byte配列をBitmapにデコードしようとしています。 BitmapFactorydecodeByteArray()decodeStream()を使用しようとしましたが、両方向がヌルの場合はBitmapとなります。BitmapFactoryのdecodeByteArrayとdecodeStreamがNULLを返します

しかし、createBitmap()setPixels()を使ってビットマップを作成すると、完璧に動作します。ここに作業コードがあります。がimageWidth*imageHeight*4

int[] pixels=new int[imageWidth*imageHeight]; 
int i=0,j=0; 
while (i<imageWidth*imageHeight*4) {   
    pixels[j]= bytesToInt(data[i], data[i+1], data[i+2],data[i+3]); 
    i += 4; 
    j++; 
} 
Bitmap bitmap=Bitmap. createBitmap(imageWidth,imageHeight,Bitmap.Config .ARGB_8888)   
bmpf.setPixels(pixels, 0, imageWidth , 0, 0, imageWidth, imageHeight); 
    //---------------------- definition of bytesToInt() 
int bytesToInt(byte b1,byte b2,byte b3,byte b4) 
{ 
    return (((b1& 0xff)<<24)+((b2 & 0xff)<<16)+((b3&0xff)<<8)+(b4&0xff)); 
} 

サイズのバイト配列である。しかし、後に道を私はbyte配列からsetPixels()ための整数配列を作成する必要があるので、私はdecodeByteArray()またはdecodeStream()を使用して、これを達成するために必要な、

データ非効率的です。 私が実装しようとしているのはビデオプレーヤーなので、毎秒約15フレーム/画像を表示する必要があります。

これで私を助けてくれる人がいますが、 事前に感謝します

+0

素早く反応してくれてありがとうPeter Knego。しかし私のビデオレンダリングコードは完成して動作していますが、このsetPixels関数のためにビデオフレームイメージのレンダリングが遅くなるという問題があります。 int i = 0、j = 0;データ[i + 1]、データ[i + 2]、データ[i + 3]);(i Siji

+0

とbyte []はありません – Siji

答えて

0

ビデオplaterは、ビデオストリーム、つまりビデオフレームのストリームを再生します。 Bitmap.decodeStreamは、イメージバイトのストリーム、すなわちJPEGまたはPNG形式のバイトストリームを期待しています。

あなたのストリームは正しい形式、つまりjpegまたはpngですか?

+0

迅速な対応Peter Knego。しかし私のビデオレンダリングコードは完成して動作していますが、このsetPixels関数のためにビデオフレームイメージのレンダリングが遅くなるという問題があります。 int i = 0、j = 0;データ[i + 1]、データ[i + 2]、データ[i + 3])のうちの少なくとも1つを含むことを特徴とする請求項1に記載の方法。 i + = 4; j ++; }このコードは実行に約50msかかる。だから私はBitmapFactoryのdecodeByteArray()を使用して現在のこのcreateBitmap()とsetPixel()を使用して自分のコードを置き換えたいordecodeStream() – Siji

+0

とはい、byte []はBitmapFactory.decodeStreamへの入力として与えられたARGB形式です – Siji

関連する問題