简体   繁体   中英

Why does BitmapFactory.decodeByteArray return null?

It's the simple code and instead of getting result to set the Bitmap, I get null. Can anyone tell me where I am making a mistake?

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

Ok, so I cannot convert text to image like I thought I could. How about this way? Will this create a 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);

From the documentation :

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

The bytes involved in the string "test" aren't a valid bitmap, are they?

If you saved the text "test" in a file called foo.png or foo.jpg etc and tried to open it in Windows, what would you expect the result to be? It would be an error: those bytes simply aren't a valid image in any known format.

EDIT: I don't know anything about Android graphics, but your update certainly looks like a much more reasonable way to draw text onto a bitmap.

You get null because you supply invalid bitmap data.

See documentation of BitmapFactory.decodeByteArray() .

Because the bytes in "test".getBytes() doesn't represent a valid bitmap .

You need to create a byte-array which actually contains an encoded bitmap, not just some "random bytes" corresponding to the representation of a string.

You're trying to parse a String as a bitmap. BitmapFactory.decodeByteArray() will fail unless there is a valid bitmap in the byte array. In this case there isn't, so it returns null.

In such case you need to convert the string to Base64 first.

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

byte array of compressed image data - what is this and how it is different from byte[] data = new byte[sz]?

Nobody so far gave clear answer. All that people been talking about is that there is an invalid Bitmap. A more informative answer would be how to create a valid byte array on the low level

In my case BitmapFactory.decodeByteArray returned null because received image buffer was incorrect. Try to see sending buffer and incoming buffer, I am sure you will see the difference in two arrays. Most of the time this is the cause.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM