2011-09-15 34 views
2

我試圖將ARGB byte數組解碼爲Bitmap以將其顯示爲ImageView。 我試過使用BitmapFactorydecodeByteArray()decodeStream(),但是兩種方法都給出了空值,如BitmapBitmapFactory的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幀/圖像。

希望有人能幫助我。 在此先感謝

+0

感謝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

+0

替換我當前使用此createBitmap()和setPixel()的代碼,並且是,byte []是ARGB格式,它被作爲輸入提供給BitmapFactory.decodeStream – Siji

回答

0

視頻打印機播放視頻流,即視頻幀流。 Bitmap.decodeStream需要圖像字節流,即JPEG或PNG格式的字節流。

您的字節流的格式是否正確,即jpeg或png?

+0

感謝快速回應Peter Knego。但是對於我來說,視頻渲染代碼是完整且可行的,由於這個setPixels函數,渲染視頻幀圖像的速度緩慢。 int i = 0,j = 0; (i Siji

+0

來代替當前使用這個createBitmap()和setPixel()的代碼,並且是的,byte []是ARGB格式的,它被作爲輸入給予BitmapFactory.decodeStream – Siji

相關問題