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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Начинающему разработчику http://www.cyberforum.ru/android-dev/thread1498151.html
Здравствуйте. Планирую разрабатывать приложения на андроид. Собственно вопрос , с чего лучше начать ? С изучения Java , изучения среды разработки или с чего то еще ?
Программирование Android Подключение joystick к android Добрый день! Есть цель написать программу подключения джойстика (кнопочный типа как у PS или xbox) usb через otg к андройд устройству. Подскажите с чего начать, есть ли подводные камни? http://www.cyberforum.ru/android-dev/thread1498073.html
Программирование Android Как красиво разместить на экране 16 кнопок (4x4)?
мне надо разместить на экране 16 кнопок(4х4 размещение, кнопки квадратные, одинакового размера, с рисунками). подскажите новичку, как лучше это реализовать, а то тупо выставлять в Андроид студии на...
Кто является parent-ом layout? Программирование Android
android:layout_width="fill_parent" кого он заполняет?
Программирование Android Не удаляется таблица в SQLite http://www.cyberforum.ru/android-dev/thread1497910.html
Первоначально в приложении существует бд с пустой таблицей. Эта база копируется из assets. По ходу выполнения приложения таблица заполняется определенными данными. По выбору пользователя он может...
Программирование Android Тормозит простая анимация в Android приложении Добрый вечер, написал простое приложение в котором имеется 7 кнопок, сделал простую XML анимацию для каждой кнопки что бы при появлении они выезжали. (<translate) Тестировал приложение на HTC ONE S... подробнее

Показать сообщение отдельно
Ksar13th
2 / 2 / 0
Регистрация: 14.02.2012
Сообщений: 31

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

13.07.2015, 16:21. Просмотров 473. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru