Android: Premature end of JPEG - android

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

Related

android read video OutOfMemoryError

I try to read a video file in Xamarin android in order to convert it to string64.
I have success with very small files (3 secondes), but if the file is bigger (1 minute) i have an OutOfMemoryError.
I have try to add android:largeHeap="true" android:hardwareAccelerated="false" in the manifest file and modify my code to read the video file but still the issue.
Failed to allocate a 134217744 byte allocation with 25165824 free bytes and 126MB until OOM, max allowed footprint 94159504, growth limit 201326592.
What i have try:
byte[] bytes = await System.IO.File.ReadAllBytesAsync(file.AbsolutePath);
string encoded = Base64.EncodeToString(bytes, 0);
return encoded;
using (var stream = new FileStream(file.AbsolutePath, FileMode.Open, FileAccess.Read))
{
//var b = ReadToEnd(stream);
//encoded = Base64.EncodeToString(b, 0);
//return encoded;
byte[] bytes;
using (var memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
bytes = memoryStream.ToArray();
}
string base64 = Convert.ToBase64String(bytes);
return base64;
}
FileInputStream fis = new FileInputStream(file.AbsolutePath);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
for (int readNum; (readNum = fis.Read(b)) != -1;)
{
bos.Write(b, 0, readNum);
}
byte[] bytes = bos.ToByteArray();
string encoded = Base64.EncodeToString(bytes, 0);
return encoded;
Have you got an idea to fix this or split video file without load it entirely?
Thanks
Do you really have to load it in memory first? Play it directly from the video file path

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

Not able to transfer image everytime through socket Android

I need to develop an application to transfer image continuously from android to android which should be received as an video on the client side..and i have two applications which one (server) will send the file through socket connected by wifi and other should the client side should recive the image which is sent...currently am just saving it in one location in the client side...am able to receive the file correctly...but the problem is am not able to send all files correctly all the time...
Means some time the image file will be transfered and some time i ll not be able to receive and when i ll not be able to receive i am getting an exception as
: java.io.UTFDataFormatException: ...and the file is not written and saved on the receiving side...
If am not able to receive images continuously...i can think there is some problem in the code..but am able to transfer it some times..and some time not able to transfer...am not able to figure what the issue is...plz any guidance
the error is:
11-18 10:38:17.351: W/System.err(1001): java.io.UTFDataFormatException: bad second or third byte at 2
11-18 10:38:17.359: W/System.err(1001): at java.nio.charset.ModifiedUtf8.decode(ModifiedUtf8.java:53)
11-18 10:38:17.359: W/System.err(1001): at java.io.DataInputStream.decodeUTF(DataInputStream.java:444)
11-18 10:38:17.359: W/System.err(1001): at java.io.DataInputStream.decodeUTF(DataInputStream.java:438)
11-18 10:38:17.359: W/System.err(1001): at java.io.DataInputStream.readUTF(DataInputStream.java:433)
and the file is not saved when i get this exception..
Many scenarios i have tested by capturing image and saving and sending...and also compressing the image and sending...in these scenarios some very rarely it is going....am not able to figure out it...
Sender code:
File myFile = new File(sdCard+"/image/image.jpg");
byte[] mybytearray = new byte[(int) myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
//bis.read(mybytearray, 0, mybytearray.length);
DataInputStream dis = new DataInputStream(bis);
dis.readFully(mybytearray, 0, mybytearray.length);
OutputStream os = socket.getOutputStream();
tv.setText("Send file name size to server");
//Sending file name,file size and to the server
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF(myFile.getName());
dos.writeLong(mybytearray.length);
dos.write(mybytearray, 0, mybytearray.length);
dos.flush();
socket.close();
tv.setText("Socket Close");
tv.setText("Sent");
Receiver Code:
File dir = new File (sdCard.getAbsolutePath() + "/dir1/dir2");
dir.mkdirs();
String fileName = clientData.readUTF();
File file = new File(dir,fileName);
OutputStream output = new FileOutputStream(file);
long size = clientData.readLong();
byte[] buffer = new byte[1024];
while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int)Math.min(buffer.length, size))) != -1)
{
output.write(buffer, 0, bytesRead);
size -= bytesRead;
System.out.println("Writing");
}
// status.setText("Received");
// Closing the FileOutputStream handle
output.close();
s.close();
Thanks and Regards,
Divya.K
I was stuck on this thing i combined few days of my search and reached to this... Try it and see if works for you..
Bitmap myBitmap = null;
try {
File imgFile = new File(imgPath);
if (imgFile.exists()) {
File image = new File(imgPath, "imagename.jpg");
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
myBitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions);
//myBitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); //uncomment this if you want to scale the image
//imageView.setImageBitmap(bitmap);//to set bitmap to image view
}
Socket sock = new Socket("192.168.1.1", 80);//ip adress and port number
ByteArrayOutputStream bos = new ByteArrayOutputStream();
if (myBitmap != null) {
myBitmap.compress(Bitmap.CompressFormat.PNG, 0 /*ignored for PNG*/, bos);
}
byte[] bitmapdata = bos.toByteArray();
ByteArrayInputStream bs = new ByteArrayInputStream(bitmapdata);
BufferedInputStream bis = new BufferedInputStream(bs);
bis.read(bitmapdata, 0, bitmapdata.length);
OutputStream os = sock.getOutputStream();
System.out.println("Sending...");
os.write(bitmapdata, 0, bitmapdata.length);
os.flush();
sock.close();
} catch (Exception e) {
e.printStackTrace();
}

write bitmap to sdcard use byte array?

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.

Algorithm to reduce byte array image size to 1MB android

I want to write a Algorithm to reduce image size to around 1MB before posting data to database in android.
My image is in byte array and i have to send byte array to database.
Here is the code i am trying, but sometimes it gives out of memory exception at bm.compress(CompressFormat.JPEG, 100, bos); line.
Code:
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
if (imgData != null) {
if (imgData.length > 1048576) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap bm = BitmapFactory.decodeByteArray(imgData, 0, imgData.length,options);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bm.compress(CompressFormat.JPEG, 100, bos);
bm.recycle();
bm = null;
byte[] data = bos.toByteArray();
ByteArrayBody bab = new ByteArrayBody(data, "image.jpg");
reqEntity.addPart("image_data", bab);
} else {
ByteArrayBody bab = new ByteArrayBody(imgData, "image.jpg");
reqEntity.addPart("image_data", bab);
}
Moreover i dont want to use Bitmap.compress as i am already using BitmapFactory options.
Thanks for help in advance!

Categories

Resources