我試圖將ARGB byte
數組解碼爲Bitmap
以將其顯示爲ImageView
。 我試過使用BitmapFactory
的decodeByteArray()
和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));
}
的字節數組但我需要實現此使用decodeByteArray()
或decodeStream()
因爲我需要從byte
陣列,創建整數數組setPixels()
後來方式,其效率低下。 我想要實現的是一個視頻播放器,因此它需要每秒顯示大約15幀/圖像。
希望有人能幫助我。 在此先感謝
感謝Peter Knego的快速反應。但是對於我來說,視頻渲染代碼是完整且可行的,由於這個setPixels函數,渲染視頻幀圖像的速度緩慢。 int i = 0,j = 0; [i],data [i + 1],data [i + 2],data [i + 3]);其中(i <圖像寬度*圖像高度* 4) i + = 4; j ++; } 此代碼需要大約50ms執行。所以我想用BitmapFactory的decodeByteArray()ordecodeStream() – Siji
替換我當前使用此createBitmap()和setPixel()的代碼,並且是,byte []是ARGB格式,它被作爲輸入提供給BitmapFactory.decodeStream – Siji