Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Some Androids Uploading Scrambled Images

First I use this code to save the photo to the Android's SD Card:

PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {

    FileOutputStream outStream = null;

    currentFilename = String.format("%d", System.currentTimeMillis());              
    outStream = new FileOutputStream("/sdcard/" + currentFilename + ".jpg");                    
    outStream.write(data);
    outStream.close();

    }
};

Then I am using this code to upload photos on Android devices:

public void uploadPhoto() {

        try {

            // Create HttpPost
            HttpPost post = new HttpPost("http://www.example.com/upload.php");
            HttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );

            // Add the Picture as "userfile"
            entity.addPart( "userfile", new FileBody( 
                new File( "/sdcard/", currentFilename + ".jpg" ),
                "image/jpeg")
            );


            // Send the data to the server
            post.setEntity( entity );
            client.execute( post );


        } catch (Exception e) {
            // catch
        } finally {
            // finally
        }

}

This works on my LG Optimus V running Android 2.2.2 and Droid X running Android 2.3.4

However - a user who has an HTC Evo running 2.3.4 (Same as my Droid X) is experiencing that all of her uploaded photos are scrambled when they are saved to her phone (and when they get to the server). The image looks like an array of jagged colored lines.

Any ideas about what might be going on here and what could be done to remedy the problem?

Update:

I was able to access this phone and when I pull the jpg files off of the sdcard, it says that the files are 3.5 - 4.0 MB in size, but they cannot be opened and may be corrupted... but the files on the other phones work normally.

like image 611
Chris Avatar asked Oct 07 '22 07:10

Chris


1 Answers

It looks like problem with picture sizes. Decoding data from array to picture when width and heigh are wrong results with scrambled image.

Pictures might be taken with supported screen sizes:

Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPictureSizes();

try to set one of them, for example the biggest, as picture size:

List<Size> sizes = params.getSupportedPictureSizes();
Size theBiggest=null;
int maxWidth = 0;
for (Size s : sizes) {
    if (s.width > maxWidth) {
        maxWidth = s.width;
        theBiggest = s;
    }
}

params.setPictureSize(theBiggest.width, theBiggest.height);
camera.setParameters(params);
like image 168
pawelzieba Avatar answered Oct 13 '22 09:10

pawelzieba