2011-06-29 39 views
5

這是簡單的代碼,而不是獲取結果來設置位圖,我得到空。誰能告訴我我犯了什麼錯誤?爲什麼BitmapFactory.decodeByteArray返回null?

String test = "test"; 
byte[] byteA = test.getBytes(); 
Bitmap bmp = BitmapFactory.decodeByteArray(byteA, 0, byteA.length); //<- I get null here 
ImageView image = (ImageView) findViewById(R.id.image); 
image.setImageBitmap(bmp); 

UPDATE

好了,所以我不能將文本轉換爲圖像像我以爲我可以。這樣呢?這會創建一個位圖嗎?

Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.RED); 
    paint.setTextSize(16); 
    paint.setAntiAlias(true); 
    paint.setTypeface(Typeface.MONOSPACE); 

    Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ALPHA_8); 
    float x = bm.getWidth(); 
    float y = bm.getHeight(); 
    Canvas c = new Canvas(bm); 
    c.drawText("Test", x, y, paint); 

回答

17

the documentation

Returns The decoded bitmap, or null if the image could not be decode.

涉及的字符串中的字節 「測試」 是不是一個有效的位圖,不是嗎?

如果您將文本「test」保存在名爲foo.pngfoo.jpg等的文件中並試圖在Windows中打開它,您希望結果如何?這將是一個錯誤:那些字節只是不是任何已知格式的有效圖像。

編輯:我不知道任何關於Android圖形,但你的更新肯定看起來像一個更合理的方式來繪製文本到位圖上。

+0

我知道。我讀過它:)。我的意思是,爲什麼它不創建位圖?代碼中的錯誤在哪裏? – sandalone

+0

字符串「test」是十六進制的「74657374」。您正試圖將其呈現爲位圖。它不是一個。 – yep

+3

@askmoo:錯誤在於嘗試讀取四個字節,就好像它們是圖像一樣。你認爲這些字節在什麼圖像格式? PNG? JPEG?你期望的形象是什麼?請注意,您*不會*加載稱爲「測試」的文件或類似的文件......您只是試圖從平臺默認編碼中表示字符串「test」的字節中創建一個圖像。 –

4

因爲"test".getBytes()中的字節不代表有效位圖

您需要創建一個實際上包含編碼位圖的字節數組,而不僅僅是與字符串表示形式對應的一些「隨機字節」。

+0

那麼如何將字符串轉換爲字節[] - >字節[]到圖像?我認爲這是做到這一點的方法。 – sandalone

+2

@askmoo:你期望圖像包含什麼? 「測試」一詞的圖片?真的不清楚你想要做什麼... –

+0

@Skeet你是對的。我編輯了代碼,我將盡快粘貼新代碼。謝謝 – sandalone

3

您試圖將字符串解析爲位圖。除非字節數組中有有效的位圖,否則BitmapFactory.decodeByteArray()將失敗。在這種情況下沒有,所以它返回null。

+0

那麼如何將字符串轉換爲byte [] - > byte []爲Image?我認爲這是做到這一點的方法。 – sandalone

+2

使用位圖創建一個位圖bm = Bitmap.createBitmap();然後使用Canvas c = new Canvas(bm)創建一個畫布;然後用'c.drawText()'在畫布上創建一些文本。位圖將包含您的文本。如果您不熟悉'Canvas',您可能需要Google提供一些教程。 –

+1

您實際上沒有與圖像關聯的字符串。你的意思是,加載一個文件,基於'String'中的名字嗎? – yep

1

在這種情況下,您需要先將字符串轉換爲Base64。

String strImage = geTImageAsHexString(); 
byte[] x = Base64.decode(strImage, Base64.DEFAULT); //convert from base64 to byte array 
Bitmap bmp = BitmapFactory.decodeByteArray(x,0,x.length); 
+0

爲我工作... – GAMA

1

壓縮圖像數據的字節數組 - 這是什麼以及它與byte [] data = new byte [sz]有什麼不同?

到目前爲止沒有人給出明確的答案!所有人都在談論的是,有一個無效的位圖。更翔實的答案會是如何創建的低水平

0

有效字節數組在我的情況BitmapFactory.decodeByteArray返回null,因爲接收到的圖像緩衝區是不正確的。試着看看發送緩衝區和傳入緩衝區,我相信你會看到兩個數組的區別。大多數時候這是原因。