Android Сохраненные изображения низкого качества

1

Я делаю снимки через следующий код и сохраняю на SD-карту, но фотографии, которые он производит, являются такими низкими качествами и действительно биткими даже со 100-процентным качеством. Возможно, bitmap.compress - это неправильный способ пойти (или растровое изображение вообще?!)

Вот мой код:

public class TakePhoto extends Activity {

    ImageView iv;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_take_photo);


        iv = (ImageView) findViewById(R.id.imageView1);

        Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, 0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);

        Bitmap bm = (Bitmap) data.getExtras().get("data");
        Random generator = new Random();
        String randFileName = String.valueOf (generator.nextInt(965) + 32);
        String both = "/mnt/extSdCard/DirectEnquiries/"+ randFileName + ".jpg";
        File imageFile = new File(both);

        writeBitmapToMemory(imageFile, bm);
        iv.setImageBitmap(bm);

    }

    public void writeBitmapToMemory(File file, Bitmap bitmap) {
        FileOutputStream fos;

        try {
            Log.e("Tom", "Starting take stream");
            fos = new FileOutputStream(file);
            Log.e("Tom", "Got stream");
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            Log.e("Tom", "Saved Image");
            fos.close();

        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();


        } 
        catch (IOException e) {
            e.printStackTrace();


        }

    }

}
  • 1
    Почему вы используете растровое изображение, используйте простую операцию копирования файлов.
  • 0
    Вы не возражаете против разработки?
Показать ещё 3 комментария
Теги:
android-camera

2 ответа

1
Лучший ответ

Пожалуйста, вызовите функцию ниже для съемки изображения с камеры.

 private final static String FOLDER_NAME = "YourAppName/Image/";
 private Uri selectedImageUri = null;

public void startCamera() 
    {
        File photo = null;
        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
        {
            photo = new File(android.os.Environment.getExternalStorageDirectory(), FOLDER_NAME+File.separator+timeStamp+".png");
        } 
        else 
        {
            photo = new File(getCacheDir(), FOLDER_NAME+File.separator+timeStamp+".png");
        }    
        if (photo != null) 
        {
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
            selectedImageUri = Uri.fromFile(photo);
            startActivityForResult(intent, CAPTURE_IMAGE_CALLBACK);
        }
    }

Вы можете получить изображение Uri в переменной selectedImageUri. (Изображение хранится в Sdcard)

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        switch (requestCode) 
        {
            case CAPTURE_IMAGE_CALLBACK:

                break;
          }
     }
  • 0
    У меня было это первоначально, но все еще была та же проблема
  • 0
    @ TomBeech Проверьте мой обновленный ответ.
Показать ещё 5 комментариев
1

Вы пытались установить качество в намерениях?

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);                
startActivityForResult(intent, 0);
  • 0
    MediaStore.EXTRA_VIDEO_QUALITY не работает на устройстве, которое я пробовал, Kitkat, 4.4.4

Ещё вопросы

Сообщество Overcoder
Наверх
Меню