Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Ksar13th
2 / 2 / 1
Регистрация: 14.02.2012
Сообщений: 31
#1

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

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

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

Как изменить размер ImageView из кода?
Нужно в зависимости от условий рассчитывать и менять высоту изображения...

Как изменить размер drawable animation-list в ProgressDialog
У меня есть два фрейма 800x600 в оригинале выглядит он так , но я получаю вот...

Как добавить SurfaceView в разметку
Здравствуйте! Я не понял, как использовать SurfaceView кроме как ...

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2015, 16:21
Привет! Вот еще темы с решениями:

Как реализовать выход из цикла и сохранение данных в SurfaceView?
Пробую реализовать простую игру на SurfaceView. Есть класс, унаследованный от...

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

Title. Изменить размер текста
Здравствуйте. Какой атрибут можно использовать, что бы установить свой размер...

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


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

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

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