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

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

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

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

13.07.2015, 16:21. Просмотров 429. Ответов 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();"; и если тестируете на телефоне на ПК под виндой - телефон нужно извлекать из ПК между тестами, иначе винда не обновляет сведения о файлах. На чём я, собственно, и погорел. >_<

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

Изменить размер сохраняемого фото Android
Android Изменить размер шрифта в виджете
Как ровно наложить imageview на surfaceview Android
Android Camera без SurfaceView
Как растянуть surfaceview на все activity? Android
Как изменить стандартную иконку apk-файла? Android
Как реализовать выход из цикла и сохранение данных в SurfaceView? Android
Android Как подгонять размер диалоговых окон по размер экрана?
Android Как изменить размер ImageView из кода?
Title. Изменить размер текста Android
Android Изменить размер изображения под телефон
Android Программно изменить размер ImageView

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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