Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
lost_in_code
0 / 0 / 0
Регистрация: 23.02.2014
Сообщений: 6
#1

Сфотографировать, обрезать, получить миниатюру и записать фото в память телефона - Программирование Android

10.06.2014, 23:03. Просмотров 1273. Ответов 0
Метки нет (Все метки)

Здравствуйте ув. форумчане, просьба помочь начинающему
Стоит задание:
1. Сделать фото по нажатию на кнопку.
2. Обрезать
3. Получить миниатюру фото и вывести в ImageView.
4. Записать обрезанное, полноразмерное фото в память телефона (или на карту, пока не важно).

Воспользовался методом http://developer.alexanderklimov.ru/...hotocamera.php и по этим http://code.tutsplus.com/tutorials/c...--mobile-11458
по сути почти одно и то же.

Стоит проблема в следующем:
1. Когда делаю таким способом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
private void getThumbailPicture() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, TAKE_PICTURE);
    }
    
    public void onClick(View v) {
        if (v.getId() == R.id.capture_btn) {
            getThumbailPicture();
            }
        }
    
    private void saveFullImage() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = new File(Environment.getExternalStorageDirectory(),
                "test.jpg");
        outputFileUri = Uri.fromFile(file);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(intent, TAKE_PICTURE);
    }
    
    @Override
    protected void onActivityResult(int requestCode,
            int resultCode, Intent data) {
        if (requestCode == TAKE_PICTURE) {
            Uri imageUri = null;
            // Check if the result includes a thumbnail Bitmap
            if (data != null) {
                if (data.hasExtra("data")) {
                    Bitmap thumbnail = data.getParcelableExtra("data");
                    ImageView image = (ImageView) findViewById(R.id.picture);
                    image.setImageBitmap(thumbnail);
                    saveFullImage();
                    // TODO Какие-то действия с миниатюрой
                }
            }
        else {
            
            // TODO Какие-то действия с полноценным изображением,
            // сохраненным по адресу outputFileUri
        }
        }
    }
то соответственно:
1. Запускается функция получения снимка, сначала для миниатюры (без обрезки).
2. Потом для полноразмерного фото.
3. Потом производиться запись снимка для полноразмерного фото в память телефона.
4. Возвращаемся на наш активити и получаем миниатюру (без обрезки) в ImageView.
5. Полноразмерное фото появляется в галерее.


Как сделать чтобы это было одно и то же фото? Получить снимок, обрезать, на активити передать миниатюру а на карту сохранить полноразмерное ?
+ реализовать обрезку, нужно как-то правильно передать адрес снимка в функцию crop();

Теперь второй способ:
2.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
public void onClick(View v) {
        try {
            // Намерение для запуска камеры
            Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(captureIntent, CAMERA_CAPTURE);
        } catch (ActivityNotFoundException e) {
            // Выводим сообщение об ошибке
            String errorMessage = "Ваше устройство не поддерживает съемку";
            Toast toast = Toast
                    .makeText(this, errorMessage, Toast.LENGTH_SHORT);
            toast.show();
        }
    }
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            // Вернулись от приложения Камера
            if (requestCode == CAMERA_CAPTURE) {
                // Получим Uri снимка
                picUri = data.getData();
                // кадрируем его
                performCrop();
            }
            // Вернулись из операции кадрирования
            else if(requestCode == PIC_CROP){
                Bundle extras = data.getExtras();
                // Получим кадрированное изображение
                Bitmap thePic = extras.getParcelable("data");
                // передаём его в ImageView
                ImageView picView = (ImageView)findViewById(R.id.picture);
                picView.setImageBitmap(thePic);
            }
        }
    }
    
    private void performCrop(){
        try {
            // Намерение для кадрирования. Не все устройства поддерживают его
            Intent cropIntent = new Intent("com.android.camera.action.CROP");
            cropIntent.setDataAndType(picUri, "image/*");
            cropIntent.putExtra("crop", "true");
            cropIntent.putExtra("aspectX", 1);
            cropIntent.putExtra("aspectY", 1);
            cropIntent.putExtra("outputX", 256);
            cropIntent.putExtra("outputY", 256);
            cropIntent.putExtra("return-data", true);
            startActivityForResult(cropIntent, PIC_CROP);
        }
        catch(ActivityNotFoundException anfe){
            String errorMessage = "Извините, но ваше устройство не поддерживает кадрирование";
            Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
            toast.show();
        }
    }
этот способ работает так:
1. Получаем фото с камеры.
2. Сразу предлагает обрезать но лезет в галерею андроида для выбора снимка, но только что сделанного снимка там нет!
3. Если выбрал любое изображение с галереи и обрезал то миниатюра отобразиться в ImageView.
4. Фото никуда не записывается.

По сути проблему решит второй способ, но нужно как-то передать ему на обработку только что сделанный снимок с камеры?
+ организовать запись фото в память.
+ добавление фото в галерею андроида.

Жду советов как соловей лета

Добавлено через 12 часов 53 минуты
Извините, проблему решил, за основу было взято первый способ реализации.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2014, 23:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сфотографировать, обрезать, получить миниатюру и записать фото в память телефона (Программирование Android):

Обрезать фото и вывести на экран приложения - Программирование Android
Всем привет! Друзья, поделитесь кусочком кода, в котором можно сделать фото, обрезать его до нужных размеров (например, 720х720) и...

Запись в память телефона из сервиса - Программирование Android
Нужно через сервис сохранить файл в память телефона в директорию. Делаю так: if...

Сохранение файла в память телефона - Программирование Android
пытаюсь сохранить файл на память телефона но никак не получается File file = new File("temp.log") мб путь неправильный?

Сохранение данных с формы в постоянную память телефона - Программирование Android
как мне сделать чтобы информацию с формы ui сохраняла не в оперативную память а просто в память телефона чтобы при закрытия приложения...

Можно ли писать текстовый файл в память телефона в свою подпапку - Программирование Android
Как сделать что то вроде такого: OutputStreamWriter outputStreamWriter = new...

Обрезать картинку под миниатюру - PHP
Здравствуйте как можно с помощю ПХП решить такую задачу, из большой прямоугойльной картинки сделать миниатюру 60х60. Только она должна...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2014, 23:03
Привет! Вот еще темы с ответами:

Сохранить фото из bitmap в формате jpg на sdcard или внутреннюю память телефона Андроид - Delphi FireMonkey
Здравствуйте! Может кто сталкивался с таким вопросом. Есть TImage в него с камеры грузится фото. Потом мне надо сохранить его под нужным...

Обрезать фото - Visual Basic .NET
Уважаемые коллеги, добрый день! Подскажите, как программно обрезать изображение из picturebox'a? В голову сразу пришло снимать...

Обрезать фото и увеличить - HTML, CSS
Здравствуйте! У меня есть фото, возможно его обрезать с помощью CSS? Нужно обрезать бока, низ и оставить только голову + увеличить до...

Обрезать повёрнутое фото - Алгоритмы
Нужно повернуть изображение (красный) на холсте (чёрный) вокруг оси расположенной в его центре и обрезать холст так, чтобы убрать пустые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru