write bitmap to sdcard use byte array? - android

I want write bitmap to sdcard use byte[] follow code below:
(I wan't use "Bitmap.compress(...)" because very slow with .PNG).
Bitmap bmp;
// Convert bitmap -> Byte[]
byte[] byteArray = bitmapToByteArray(bmp);
// convert byte[] -> inputstream
InputStream inStream = new ByteArrayInputStream(byteArray);
FileOutputStream fos = new FileOutputStream(pathFile);
int b;
byte[] d = new byte[4096];
while ((b = inStream.read(d)) != -1) {
fosX.write(d, 0, b);
}
// Function convert bitmap -> byte[]
public static byte[] bitmapToByteArray(Bitmap bm) {
int bytes = bm.getWidth()*bm.getHeight()*4;
ByteBuffer buffer = ByteBuffer.allocate(bytes);
bm.copyPixelsToBuffer(buffer);
byte[] array = buffer.array();
return array;
}
File Bitmap after writed is error. Pls

I dont think you can just write the bytes to a file and expect it to be a functioning Bitmap file. A bitmap file contains other information than just the bytes of the image,like the file header.
You're best bet is to use Bitmap.compress()
FileOutputStream fos= new FileOutputStream(pathFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 80, fos);
Also, you could offload the compression to a separate thread to keep your UI responsive.

Related

How to convert bitmap image to file format which I get from canvas in android

I make canvas view which I want to send in server using retrofit library. I get canvas view in bitmap format. Now I want to convert bitmap to file format so that I can upload in server in file format.
File file = new File(context.getCacheDir(), filename);
file.createNewFile();
/* Convert bitmap to byte array */
Bitmap bitmap = bitmap; //bitmap is your bitmap file which you want to convert
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 , bos);
byte[] bitmapdata = bos.toByteArray();
/* write the bytes in file */
FileOutputStream fos = new FileOutputStream(file);
fos.write(bitmapdata);
fos.flush();
fos.close();
Always close and flush the FileOutputStream.
Convert ua bitmap to base64 String like below and send it using string
public static String bitmapToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality)//u can pass 100 in quality or any integer
{
ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
image.compress(compressFormat, quality, byteArrayOS);
return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT);
}

I want to convert a bitmap image to byte array format in android. is it possible?

I want to convert and Image to Byte. The exact format that i want is shared below.
public static byte[] ImageByte = new byte[] { (byte)0x1b,(byte)0x42,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x33
,(byte)0x07,(byte)0x01,(byte)0x00,(byte)0x34,(byte)0x47,(byte)0x00,(byte)0x32,(byte)0x01,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x00,(byte)0x34,(byte)0x47,(byte)0x00,(byte)0x32,(byte)0x07,(byte)0x01,(byte)0xf0,(byte)0x01
,(byte)0x30,(byte)0x01,(byte)0x10,(byte)0x01,(byte)0x00,(byte)0x32,(byte)0x47,(byte)0x00,(byte)0x32,(byte)0x3f,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x1e,(byte)0x01,(byte)0x00,(byte)0x32,(byte)0x47
,(byte)0x00,(byte)0x32,(byte)0x7e,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x1c,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x32,(byte)0xf8,(byte)0x01,(byte)0x00
,(byte)0x01,(byte)0x1e,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x03,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x06,(byte)0x01,(byte)0x7e,(byte)0x01
,(byte)0x03,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x07,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xf0
,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x0f,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x31
,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x1f,(byte)0x01,(byte)0xcf,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31
,(byte)0x3f,(byte)0x01,(byte)0xff,(byte)0x02,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x3f,(byte)0x01,(byte)0xff,(byte)0x02,(byte)0xf0
,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x7f,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x7f,(byte)0x01,(byte)0xff,(byte)0x02,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xff,(byte)0x01
,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0xff,(byte)0x03,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47
,(byte)0x00,(byte)0x30,(byte)0x01,(byte)0x01,(byte)0xff,(byte)0x02,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0xff,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x01
,(byte)0x01,(byte)0xff,(byte)0x02,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0xff,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x02
,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc
,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf0,(byte)0x01
,(byte)0x00,(byte)0x02,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00
,(byte)0x02,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x02
,(byte)0x0f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x00,(byte)0x03,(byte)0x1f,(byte)0x01,(byte)0xff
,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x00,(byte)0x03,(byte)0x3f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf8,(byte)0x01
,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x03,(byte)0x3e,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47
,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x03,(byte)0xf8,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f
,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0x03,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01
,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0x0f,(byte)0x01,(byte)0xc1,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x1f,(byte)0x01,(byte)0xc0
,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0x3f,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x1f,(byte)0x01,(byte)0xc0,(byte)0x01
,(byte)0x00,(byte)0x01,(byte)0x02,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x1f,(byte)0x01,(byte)0x80
,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x1f,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01
,(byte)0x00,(byte)0x02,(byte)0x3f,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x1f,(byte)0x01,(byte)0x00
,(byte)0x02,(byte)0xfe,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x1f,(byte)0x01,(byte)0xf7,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0f,(byte)0x01,(byte)0x00,(byte)0x01
,(byte)0x0f,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x7f,(byte)0x01,(byte)0xf3,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0e,(byte)0x01,(byte)0x00
,(byte)0x01,(byte)0x1f,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xe3,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0e,(byte)0x01
,(byte)0x00,(byte)0x01,(byte)0x3c,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xc3,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30,(byte)0x0c
,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x83,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x30
,(byte)0x0c,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x1f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x83,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00
,(byte)0x30,(byte)0x0c,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0x00,(byte)0x02,(byte)0x3f,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31
,(byte)0x0e,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x1c
,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x1f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x1c,(byte)0x01
,(byte)0x00,(byte)0x01,(byte)0x3f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xe6,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x18,(byte)0x01,(byte)0x01
,(byte)0x01,(byte)0xff,(byte)0x02,(byte)0x8e,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x18,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xff,(byte)0x01
,(byte)0xfc,(byte)0x01,(byte)0x0e,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x30,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xe0
,(byte)0x01,(byte)0x1e,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x30,(byte)0x01,(byte)0x3f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x00,(byte)0x01
,(byte)0x3c,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x30,(byte)0x01,(byte)0x7f,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x7c
,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x30,(byte)0x01,(byte)0x7f,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xf8,(byte)0x01
,(byte)0x0f,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x30,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x30,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x1f
,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x38,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x1e,(byte)0x01,(byte)0x00,(byte)0x31
,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x38,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x3c,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31
,(byte)0x1c,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x78,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x0e,(byte)0x01,(byte)0xe0
,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x07,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x0f,(byte)0x01
,(byte)0xff,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x03,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x03
,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x31,(byte)0x47,(byte)0x00,(byte)0x31,(byte)0x01,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0x00,(byte)0x32
,(byte)0x47,(byte)0x00,(byte)0x32,(byte)0x7c,(byte)0x01,(byte)0x00,(byte)0x35,(byte)0x47,(byte)0x00,(byte)0x32,(byte)0x1c,(byte)0x01,(byte)0x00,(byte)0x35,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68
,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x33,(byte)0xff,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00,(byte)0x33,(byte)0x47,(byte)0x00,(byte)0x33,(byte)0x7f,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x00
,(byte)0x33,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x38,(byte)0x0e,(byte)0x01,(byte)0x00,(byte)0x2f,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x0f,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x0a
,(byte)0x7f,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x2e,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0xe1,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0x84,(byte)0x01,(byte)0x06
,(byte)0x01,(byte)0x81,(byte)0x01,(byte)0x84,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0x1c,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0xf0
,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0x63,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x1f,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0xf1,(byte)0x01
,(byte)0xe7,(byte)0x01,(byte)0xf3,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x7e,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0xc1,(byte)0x02,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00
,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0x61,(byte)0x01,(byte)0xdc,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x74,(byte)0x01,(byte)0x66,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0xe3,(byte)0x01,(byte)0x11,(byte)0x01,(byte)0x9c
,(byte)0x01,(byte)0x66,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xc1,(byte)0x01,(byte)0x98,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01
,(byte)0x61,(byte)0x01,(byte)0xcc,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x8c,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0x03,(byte)0x01
,(byte)0x80,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xc1,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x07,(byte)0x01,(byte)0xe1,(byte)0x01,(byte)0xcc,(byte)0x01,(byte)0x60
,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x8c,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0xe1
,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x07,(byte)0x01,(byte)0xf1,(byte)0x01,(byte)0xcc,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x60,(byte)0x01
,(byte)0x7f,(byte)0x01,(byte)0xe3,(byte)0x01,(byte)0xf1,(byte)0x01,(byte)0x8c,(byte)0x01,(byte)0x7c,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0x83,(byte)0x01,(byte)0xe3,(byte)0x01,(byte)0x61,(byte)0x01,(byte)0xf0,(byte)0x01
,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0x39,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0xf1
,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x3e,(byte)0x01,(byte)0x03,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0xc7,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0xf8,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c
,(byte)0x06,(byte)0x01,(byte)0x39,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0x11,(byte)0x01,(byte)0xfc,(byte)0x01,(byte)0x0e,(byte)0x01
,(byte)0x01,(byte)0x01,(byte)0x80,(byte)0x01,(byte)0xc7,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0x39,(byte)0x01,(byte)0xdc
,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0x38,(byte)0x01,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0x9c,(byte)0x01,(byte)0x06,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0xc6
,(byte)0x01,(byte)0x30,(byte)0x01,(byte)0x18,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0x39,(byte)0x01,(byte)0xce,(byte)0x01,(byte)0x78,(byte)0x01,(byte)0x70,(byte)0x01
,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0x19,(byte)0x01,(byte)0x8e,(byte)0x01,(byte)0xc6,(byte)0x01,(byte)0x01,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0xce,(byte)0x01,(byte)0x39,(byte)0x01,(byte)0x18,(byte)0x01
,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x0f,(byte)0x01,(byte)0x71,(byte)0x01,(byte)0xc7,(byte)0x01,(byte)0x3c,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x60,(byte)0x02,(byte)0xe3,(byte)0x01,(byte)0xf9
,(byte)0x01,(byte)0x87,(byte)0x01,(byte)0xee,(byte)0x01,(byte)0x00,(byte)0x01,(byte)0xf9,(byte)0x01,(byte)0xcc,(byte)0x01,(byte)0x1d,(byte)0x01,(byte)0xb8,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c
,(byte)0x0f,(byte)0x01,(byte)0xe1,(byte)0x01,(byte)0xc3,(byte)0x01,(byte)0xdf,(byte)0x01,(byte)0xc0,(byte)0x01,(byte)0xf0,(byte)0x02,(byte)0xe7,(byte)0x01,(byte)0xf1,(byte)0x01,(byte)0xc3,(byte)0x01,(byte)0xfc,(byte)0x01
,(byte)0x00,(byte)0x01,(byte)0x3f,(byte)0x01,(byte)0xdc,(byte)0x01,(byte)0x1d,(byte)0x01,(byte)0xf0,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00
,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x06,(byte)0x01,(byte)0xc4,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x4e,(byte)0x01,(byte)0x76,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0xf9
,(byte)0x01,(byte)0x1c,(byte)0x01,(byte)0xc4,(byte)0x01,(byte)0x9c,(byte)0x01,(byte)0xcf,(byte)0x01,(byte)0x0f,(byte)0x01,(byte)0x64,(byte)0x01,(byte)0xe6,(byte)0x01,(byte)0x1c,(byte)0x01,(byte)0x90,(byte)0x01,(byte)0x00
,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x07,(byte)0x01,(byte)0x46,(byte)0x01,(byte)0xff,(byte)0x01,(byte)0x4e,(byte)0x01,(byte)0x7a,(byte)0x01,(byte)0xe1,(byte)0x01,(byte)0xcb,(byte)0x01,(byte)0x1c,(byte)0x01
,(byte)0xc6,(byte)0x01,(byte)0x9d,(byte)0x01,(byte)0xef,(byte)0x01,(byte)0x04,(byte)0x01,(byte)0x66,(byte)0x01,(byte)0xef,(byte)0x01,(byte)0x3f,(byte)0x01,(byte)0xb0,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00
,(byte)0x2c,(byte)0x07,(byte)0x01,(byte)0xce,(byte)0x01,(byte)0x62,(byte)0x01,(byte)0x4a,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0xc1,(byte)0x01,(byte)0x83,(byte)0x01,(byte)0x1c,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0x9d
,(byte)0x01,(byte)0xc6,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0x7e,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x05,(byte)0x01
,(byte)0xcf,(byte)0x01,(byte)0x62,(byte)0x01,(byte)0x4e,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0xe1,(byte)0x01,(byte)0x83,(byte)0x01,(byte)0x1d,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0x9c,(byte)0x01,(byte)0xe6,(byte)0x01
,(byte)0x05,(byte)0x01,(byte)0x7c,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0x66,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x05,(byte)0x01,(byte)0xcf,(byte)0x01,(byte)0x63
,(byte)0x01,(byte)0xcf,(byte)0x01,(byte)0x70,(byte)0x01,(byte)0xe1,(byte)0x01,(byte)0xfb,(byte)0x01,(byte)0xdd,(byte)0x01,(byte)0xf5,(byte)0x01,(byte)0x9d,(byte)0x01,(byte)0xe6,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0x6e
,(byte)0x01,(byte)0xe7,(byte)0x01,(byte)0xfe,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x2c,(byte)0x0e,(byte)0x01,(byte)0xdb,(byte)0x01,(byte)0x63,(byte)0x01,(byte)0xcb,(byte)0x01
,(byte)0xf8,(byte)0x01,(byte)0xe0,(byte)0x01,(byte)0x7b,(byte)0x01,(byte)0xdd,(byte)0x01,(byte)0x3c,(byte)0x01,(byte)0x9d,(byte)0x01,(byte)0xe6,(byte)0x01,(byte)0x07,(byte)0x01,(byte)0x64,(byte)0x01,(byte)0xed,(byte)0x01
,(byte)0xbe,(byte)0x01,(byte)0x60,(byte)0x01,(byte)0x00,(byte)0x2c,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00
,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x47,(byte)0x00,(byte)0x68,(byte)0x1b,(byte)0x45};
If you are taking from the image Via the Gallery intent. Open an input stream and then loop through it till you reach the End of the stream. In the loop read each byte and place in the array.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] b = new byte[0];
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
InputStream inputStream = getActivity().getApplicationContext().getContentResolver().openInputStream(data.getData());
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
b = baos.toByteArray();
baos.close();
Please see how to ask on stack overflow. Now come to your question, try this code to get a byte array from bitmap,
Bitmap bitmap = intent.getExtras().get("data");
ByteArrayOutputStream bos= new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bos);
byte[] byteArray = bos.toByteArray();

writing bitmap to file changes bytes?

I made a Bitmap out of a byte array. I want to save the bitmap to a file. I then want to retrieve that Bitmap and restore the original byte array. I thought I could just simply save the file and then read it, but apparently the bytes are different...
Saving bitmap:
// create the bitmap
final Bitmap bitmap = Bitmap.createBitmap(width, newHeight, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(originalBytes);
bitmap.copyPixelsFromBuffer(buffer);
...
// save the bitmap to file
String dir_path = Environment.getExternalStorageDirectory().getAbsolutePath();
File dir = new File(dir_path);
if(!dir.exists())
{
dir.mkdirs();
}
File file = new File(dir, "meh.png");
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
I then read this file
// read the file
String file_path = Environment.getExternalStorageDirectory().getAbsolutePath();
Bitmap bitmap = BitmapFactory.decodeFile(file_path + "/" + "meh.png");
// get the bytes
ByteBuffer buffer = ByteBuffer.allocate(bitmap.getByteCount());
bitmap.copyPixelsToBuffer(buffer);
byte[] retrievedBytes = buffer.array();
When I compare originalBytes with retrievedBytes, the lengths are the same, but the content is not. I thought Bitmap.CompressFormat.PNG guarantees no compression? What am I missing here?
EDIT:
Here are parts of the both byte arrays converted to hex
original bytes hex: 8D7D A111 DE1D 105F 0B58 86A0 5F4D 035A D9A6 ...
retrieved bytes hex: 0406 0711 1F1D 105F 0B58 86A0 054D 035A 3C09 ...
Do not use Bitmap and BitmapFactory to save a byte array to file or loading a file in a byte array. As you saw that will change the bytes.
Better directly save the byte array to file. And load the contents of a file directly in a byte array.
Will be much quicker too.

Android: Premature end of JPEG

I have to send to a server a few JPEG files taken form camera. Of course they are to big to do it simply by file stream. My code (for each file) looks as follow:
struct3.put("type", "image/jpeg");
f = new File(fileName);
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[(int)f.length()];
bis.read(buffer);
fis.close();
struct3.put("bits", buffer);
After all I send a struct:
Object[] params3 = { bid, login, pass, struct3 };
Object response2 = client.send("my_function", params3);
When I send small files all is correct, but when files are bigger I received "Out of Memory Exception".
My solution of that is to compress JPEG files:
struct3.put("type", "image/jpeg");
final Options opts = new Options();
opts.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(fileName, opts);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
byte[] byteArray = stream.toByteArray();
struct3.put("bits", byteArray);
Object[] params3 = { bid, login, pass, struct3 };
Object response2 = client.send("my_function", params3);
But that way produced an error ON THE SERVER SIDE:
"Premature End of JPEG file".
Is there any way to correct the JPEG file before sending it?
I know that JPEG shoud end with EOI ( 0xff, 0xfd).
How to check it and make a corrections?
There is no log cat report due to photos are uploaded to WordPress and only track is warning from gdlib. The warning contains: "Premature End of JPEG file"
Although I solved the problem. I've implemented procedure checking if byteArray ends with 0xFF,0xD9 and in case is not I add two bytes:
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
byte[] byteArray = stream.toByteArray();
int byteToSendSize = byteArray.length;
boolean proper = ((byteArray[byteArray.length-2])==((byte)0xff))
&& ((byteArray[byteArray.length-1])==((byte)0xd9));
if(!proper)
byteToSendSize +=2;
byte[] byteToSend = new byte[byteToSendSize];
for (int i = 0; i < byteArray.length; i++) {
byteToSend[i] = byteArray[i];
}
if(!proper){
byteToSend[byteArray.length] = (byte) 0xff;
byteToSend[byteArray.length+1] = (byte) 0xd9;
}
struct3.put("bits", byteToSend);

How to encode JPEG / PNG to Base64 without decoding to bitmap, using less memory

There are good resource over converting JPEG to base64.
I am particularly interested in doing it without decoding to bimap, avoiding any memory inflation. I also understand that any file can be encoded into Base64 by converting it into byte array first.
So if we can directly create a byte array of JPEG / PNG file which is far less than the byte array of a decoded jpeg bitmap we can convert it to base64 using less memory footprint.
The closest answer I have come across is this https://stackoverflow.com/a/10160856/499752
public void getGalleryDetails(String path) throws FileNotFoundException {
InputStream inputStream = new FileInputStream(path);
byte[] bytes;
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try{
while((bytesRead = inputStream.read(buffer)) != -1){
output.write(buffer, 0, bytesRead);
}
}catch(IOException e){
e.printStackTrace();
}
bytes = output.toByteArray();
encodedImage = Base64.encodeToString(bytes, Base64.DEFAULT);
Log.i("ENCODED", encodedImage);
}
You could actually use this ... where you can provide the path of the file to be converted to Base64. Sorry for the late post ... Just say this post.

Categories

Resources