При съемке с камерой и отправке на сервер, потеря качества изображения - PullRequest
0 голосов
/ 29 февраля 2012

Я боролся с этой проблемой уже несколько дней, и я действительно не знаю, в чем проблема.Мой класс CameraView имеет следующий код:

Camera.PictureCallback photoCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] imageData, Camera camera) {
        Intent mIntent = new Intent();  
        mIntent.putExtra(GeneralCodes.CREATE_NEW_ACCOUNT_PROFILE_PICTURE, imageData);
        setResult(Activity.RESULT_OK, mIntent);
        finish();
    }
};

И затем моя активность, которая получает этот результат:

ImageView i = (ImageView) findViewById(R.id.createAccounProfileImage);
Bitmap yourSelectedImage = FileUtilities.createBitmapBasedOnByteImage(data.getByteArrayExtra(GeneralCodes.CREATE_NEW_ACCOUNT_PROFILE_PICTURE), getResources().getDisplayMetrics().density);

finalImage=yourSelectedImage;
            i.setImageBitmap(BitmapUtils.getRoundedCornerBitmap(finalImage, Math.min(finalImage.getWidth(), finalImage.getHeight()), true));        

Единственное, что на самом деле делает метод FileUtilities.createBitmapBasedOnByteImage, это простоВызов BitmapFactory.decodeByteArray ().

Затем мой следующий шаг - отправка этого растрового изображения на мой сервер:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
    if(finalImage!=null)finalImage.compress(Bitmap.CompressFormat.JPEG, 0, baos);
    byte[] data = baos.toByteArray();

    pairs.add(new BasicNameValuePair("PROFILE_PIC_DATA", Base64.encodeToString(data, Base64.DEFAULT)));     

Информация отправляется на мой сервер, и изображение сохраняется в CLOB.Когда моя следующая активность извлекает эти данные:

bitmap = BitmapFactory.decodeStream(createInputStream(Base64.decode(obj.getString("photo_image"), Base64.DEFAULT)));

Качество полностью испорчено.Как будто это было сделано 0.3mpx камерой.Я использую Samsung Galaxy Nexus, поэтому я считаю, что мой экран делает его еще хуже.Изображения в CLOB имеют размер около 2,7 КБ ... поэтому я предполагаю, что при отправке на мой сервер данные теряются ... Не совсем уверен.

Кто-нибудь когда-либо видел это?

Спасибо, Фелипе

1 Ответ

2 голосов
/ 29 февраля 2012

Вы устанавливаете качество изображения на 0 при сжатии. Вместо этого установите его на что-то большее. См. документы . Что-то вроде:

if(finalImage!=null)finalImage.compress(Bitmap.CompressFormat.JPEG, 80, baos);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...