2011-06-29 41 views
5

Đó là mã đơn giản và thay vì nhận kết quả để đặt Bitmap, tôi nhận được giá trị rỗng. Bất cứ ai có thể cho tôi biết nơi tôi đang làm sai?Tại sao BitmapFactory.decodeByteArray trả về 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); 

CẬP NHẬT

Ok, vì vậy tôi không thể chuyển đổi văn bản để hình ảnh như tôi nghĩ tôi có thể. Làm thế nào về cách này? Điều này sẽ tạo ra một bitmap?

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); 

Trả lời

17

Từ the documentation:

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

Các byte tham gia vào chuỗi "thử nghiệm" không phải là một bitmap hợp lệ, chúng là gì?

Nếu bạn đã lưu văn bản "kiểm tra" trong tệp có tên foo.png hoặc foo.jpg v.v ... và cố mở nó trong Windows, bạn sẽ mong đợi kết quả như thế nào? Nó sẽ là một lỗi: những byte đó chỉ đơn giản là không phải là một hình ảnh hợp lệ ở bất kỳ định dạng đã biết nào.

EDIT: Tôi không biết gì về đồ họa Android, nhưng bản cập nhật của bạn chắc chắn trông giống như cách hợp lý hơn để vẽ văn bản lên bitmap.

+0

Tôi biết điều đó. Tôi đa đọc no :). Ý tôi là, tại sao nó không tạo bitmap? Lỗi trong mã ở đâu? – sandalone

+0

Chuỗi "test" là '74657374' trong hệ thập lục phân. Bạn đang cố gắng hiển thị nó dưới dạng bitmap. Nó không phải là một. – yep

+3

@askmoo: Sai lầm là cố gắng đọc bốn byte như thể chúng là một hình ảnh. Bạn nghĩ các định dạng hình ảnh này là gì? PNG? JPEG?Những gì bạn mong đợi hình ảnh được? Lưu ý rằng bạn * không * tải một tệp có tên là "test" hoặc bất cứ thứ gì như thế ... bạn chỉ đang cố gắng tạo một hình ảnh từ các byte biểu diễn chuỗi "test" trong mã hóa mặc định nền tảng. –

4

Do các byte trong "test".getBytes()không đại diện cho bitmap hợp lệ.

Bạn cần phải tạo một mảng byte thực sự chứa bitmap được mã hóa, không chỉ một số "byte ngẫu nhiên" tương ứng với biểu diễn chuỗi.

+0

Vậy làm thế nào để chuyển đổi chuỗi thành byte [] -> byte [] thành ảnh? Tôi nghĩ đây là cách để làm điều đó. – sandalone

+2

@askmoo: Bạn mong đợi hình ảnh sẽ chứa gì? Một hình ảnh của từ "thử nghiệm"? Nó thực sự không rõ ràng những gì bạn đang cố gắng để làm ... –

+0

@ Skeet Bạn là chính xác. Tôi đã chỉnh sửa mã và tôi sẽ sớm dán mã mới. Cảm ơn – sandalone

3

Bạn đang cố gắng phân tích cú pháp Chuỗi dưới dạng bitmap. BitmapFactory.decodeByteArray() sẽ thất bại trừ khi có một bitmap hợp lệ trong mảng byte. Trong trường hợp này không có, vì vậy nó trả về null.

+0

Vì vậy, làm thế nào để chuyển đổi chuỗi thành byte [] -> byte [] thành hình ảnh? Tôi nghĩ đây là cách để làm điều đó. – sandalone

+2

Tạo một 'Bitmap' bằng cách sử dụng' Bitmap bm = Bitmap.createBitmap(); 'sau đó tạo canvas bằng cách sử dụng' Canvas c = new Canvas (bm); 'sau đó tạo một số văn bản trong canvas bằng' c.drawText() '. Bitmap sẽ chứa văn bản của bạn. Bạn có thể cần đến Google để có một số hướng dẫn về 'Canvas' nếu bạn không quen với nó. –

+1

Bạn thực sự không có chuỗi tương ứng với hình ảnh. Bạn có nghĩa là, tải một tập tin, dựa trên một tên bạn có trong một 'String'? – yep

1

Trong trường hợp này, bạn cần chuyển đổi chuỗi thành Base64 trước tiên.

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

đã hoạt động cho tôi ... – GAMA

1

mảng byte dữ liệu ảnh nén - dữ liệu này là gì và khác với byte [] data = new byte [sz]?

Không ai cho đến nay đưa ra câu trả lời rõ ràng! Tất cả những gì mọi người đang nói đến là có một Bitmap không hợp lệ. Một câu trả lời nhiều thông tin hơn sẽ là cách tạo một mảng byte hợp lệ ở mức thấp

0

Trong trường hợp của tôi BitmapFactory.decodeByteArray trả về null vì bộ đệm hình ảnh nhận được không chính xác. Hãy thử xem việc gửi bộ đệm và bộ đệm đến, tôi chắc chắn bạn sẽ thấy sự khác biệt trong hai mảng. Hầu hết thời gian này là nguyên nhân.

Các vấn đề liên quan