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

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

Войти
Регистрация
Восстановить пароль
 
Ksar13th
2 / 2 / 0
Регистрация: 14.02.2012
Сообщений: 31
#1

SurfaceView и Camera - как изменить размер файла? - Программирование Android

13.07.2015, 16:21. Просмотров 457. Ответов 0
Метки нет (Все метки)

Цель: сделать фотку камерой, и получить её в виду Byte[].
Реализация: Использую SurfaceView и Camera. (системная камера через intent не устраивает, нашёл вот такой метод реализации как ниже)
Беда: при сохранении JPg файла - он имеет размер 640x480. Что бы я не делал. А мне нужен файл где-то под 1200. Как изменить расширение сохраняемого файла? Не могу найти, пол дня убил уже.((

*тестирую на Samsung Galaxy S3.


Ниже код(постарался вырезать из него всё лишнее)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
public class CameraActivity extends Activity {
 
    SurfaceView surfaceView;
    Camera camera;
    File photoFile;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        setContentView(R.layout.activity_camera);
 
        File pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
        photoFile = new File(pictures, "myphoto.jpg");
 
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
 
        LayoutParams lp = surfaceView.getLayoutParams();
        lp.width = 200;
        lp.height = 100;
        surfaceView.setLayoutParams(lp);
 
        SurfaceHolder holder = surfaceView.getHolder();
        holder.addCallback(new SurfaceHolder.Callback() {
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                SetCameraParams();
                try {
                    camera.setPreviewDisplay(holder);
                    camera.startPreview();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
 
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format,int width, int height) {
                //SetCameraParams();
            }
 
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
            }
        });
 
    }
 
 
    protected void SetCameraParams() {
 
        Camera.Parameters param;
        param = camera.getParameters();
 
        param.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);
        param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
        param.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO);
        param.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO);
        param.setExposureCompensation(0);
        param.setPictureFormat(ImageFormat.JPEG);
        param.setJpegQuality(100);
        param.setRotation(90);
 
        List<Camera.Size> sizes = param.getSupportedPictureSizes();
        Camera.Size size = sizes.get(0);
        param.setPictureSize(100, 200);
 
       /*param.setJpegQuality(100);
        param.setPreviewSize(200, 100);
        param.setPictureSize(200, 100);
        param.setJpegThumbnailSize(200, 100);*/
 
        camera.setParameters(param);
 
        //camera.setDisplayOrientation(0);
    }
 
 
 
 
    @Override
    protected void onResume() {
        super.onResume();
        camera = Camera.open();
    }
 
 
    @Override
    protected void onPause() {
        super.onPause();
        if (camera != null)
            camera.release();
        camera = null;
    }
 
    public void onClickPicture(View view) {
        camera.takePicture(null, null, new PictureCallback() {
            @Override
            public void onPictureTaken(byte[] data, Camera camera) {
                try {
                    ExitExecute(data, photoFile);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
 
    }
 
 // выход из активности
    void ExitExecute(byte[] b, File f) {
        try {
            // сохранение в файл для проверки
            FileOutputStream file_output_stream = new FileOutputStream(f);
            file_output_stream.write(b);
            file_output_stream.close();
 
            // уходим
            finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
Добавлено через 1 час 31 минуту
Отбой, тему можно закрывать.

Может кому пригодится - копать сюда:
param = camera.getParameters();
param.setPictureSize(960, 720);
camera.setParameters(param);

Только разрешение должно быть выбрано из списка "param.getSupportedPictureSizes();"; и если тестируете на телефоне на ПК под виндой - телефон нужно извлекать из ПК между тестами, иначе винда не обновляет сведения о файлах. На чём я, собственно, и погорел. >_<

Но всё равно спасибо, что выслушали, это помогло.)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 16:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос SurfaceView и Camera - как изменить размер файла? (Программирование Android):

Camera без SurfaceView - Программирование Android
Здравствуйте. Можно ли сделать снимок с помощью класса Camera без предварительного просмотра? Например Camera.open() и потом сразу...

Как изменить размер ImageView из кода? - Программирование Android
Нужно в зависимости от условий рассчитывать и менять высоту изображения ImageView. Так, как относительно этой ImageView позиционируются...

Как добавить SurfaceView в разметку - Программирование Android
Здравствуйте! Я не понял, как использовать SurfaceView кроме как setContentView(new surfaceview(this)); Моя разметка: &lt;?xml...

Как растянуть surfaceview на все activity? - Программирование Android
У активити какая то дурацкая область по периметру, на которой нельзя размещять никакие компоненты.В итоге вокруг surfaceview получаеться...

Как ровно наложить imageview на surfaceview - Программирование Android
Не удается подогнать правильно размер эти двух view. Хочу чтобы фотография накладывалась на изображение с камеры, но фотография всегда...

Как реализовать выход из цикла и сохранение данных в SurfaceView? - Программирование Android
Пробую реализовать простую игру на SurfaceView. Есть класс, унаследованный от Thread и метод run(). Именно в нем делаю отрисовку и...

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

Как изменить стандартную иконку apk-файла? - Программирование Android
экспортирую из эклипса приложение в апк-файл... но ярлык этого файла со стандартной иконкой, как ее можно изменить? ЗЫ до этого другое...

Изменить размер сохраняемого фото - Программирование Android
как изменить размер сохраняемого фото через camera.takePicture? или нужно где то в другом месте изменять?

Изменить размер шрифта в виджете - Программирование Android
Т.к. в AppWidgetProvider не используется findViewById используют класс RemoteView. RemoteViews rv= new...

Title. Изменить размер текста - Программирование Android
Здравствуйте. Какой атрибут можно использовать, что бы установить свой размер текста &quot;Теория&quot;? &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; ...


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

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

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