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

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

Войти
Регистрация
Восстановить пароль
 
SMore
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 44
#1

Задать качество фотографии - Программирование Android

26.11.2016, 22:01. Просмотров 279. Ответов 3

Добрый вечер! Подскажите, пожалуйста, как сохранить фотографию в определенном качестве и формате? Пишу свою камеру и не могу найти на форумах параметр, отвечающий за то, чтобы задать определенный размер. Нужно, чтобы после фотографирования картинка сохранилась в .jpg и 1920х1080. А то без этого параметра фото получается в плохом качестве.
Вот сам код сохранения:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 @Override
        public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) {
            
 
                try {
                    File saveDir = new File("/sdcard/Cash/");
 
                    if (!saveDir.exists()) {
                        saveDir.mkdirs();
                    }
 
                    FileOutputStream os = new FileOutputStream(String.format("/sdcard/Cash/%d.jpg", System.currentTimeMillis()));
 
                    os.write(paramArrayOfByte);
                    os.close();
 
 
                } catch (Exception e) {
                }
                
                paramCamera.startPreview();
            }
Если это не здесь прописывается, то что нужно подправить? Это уже весь код полностью.

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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
public class MainScreen extends Activity implements SurfaceHolder.Callback, View.OnClickListener, Camera.PictureCallback, Camera.PreviewCallback, Camera.AutoFocusCallback
{
    private Camera camera;
    private SurfaceHolder surfaceHolder;
    private SurfaceView preview;
    private Button shotBtn;
 
 
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 
        requestWindowFeature(Window.FEATURE_NO_TITLE);
 
        setContentView(R.layout.camera);
       
        preview = (SurfaceView) findViewById(R.id.SurfaceView01);
 
        surfaceHolder = preview.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        
        shotBtn = (Button) findViewById(R.id.Button01);
        shotBtn.setOnClickListener(this);
    }
 
    @Override
    protected void onResume()
    {
        super.onResume();
        camera = Camera.open();
    }
 
    @Override
    protected void onPause()
    {
        super.onPause();
 
        if (camera != null)
        {
            camera.setPreviewCallback(null);
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    }
 
 
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
    {
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder holder)
    {
        try
        {
            camera.setPreviewDisplay(holder);
            camera.setPreviewCallback(this);
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
 
        Size previewSize = camera.getParameters().getPreviewSize();
        float aspect = (float) previewSize.width / previewSize.height;
 
        int previewSurfaceWidth = preview.getWidth();
        int previewSurfaceHeight = preview.getHeight();
 
        LayoutParams lp = preview.getLayoutParams();        
 
        if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
        {            
            camera.setDisplayOrientation(90);
            lp.height = previewSurfaceHeight;
            lp.width = (int) (previewSurfaceHeight / aspect);
 
        }
        else
        {
            camera.setDisplayOrientation(0);
            lp.width = previewSurfaceWidth;
            lp.height = (int) (previewSurfaceWidth / aspect);
        }
 
        preview.setLayoutParams(lp);
        camera.startPreview();
    }
 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder)
    {
    }
 
    @Override
    public void onClick(View v)
    {
 
        if (v == shotBtn)
        {
            camera.autoFocus(this);
        }
 
    }
 
        @Override
        public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera) {
           
 
                try {
                    File saveDir = new File("/sdcard/Cash/");
 
                    if (!saveDir.exists()) {
                        saveDir.mkdirs();
                    }
 
                    FileOutputStream os = new FileOutputStream(String.format("/sdcard/Cash/%d.jpg", System.currentTimeMillis()));
 
 
                    os.write(paramArrayOfByte);
                    os.close();
 
 
                } catch (Exception e) {
                }
                
                paramCamera.startPreview();
 
            }       
 
    @Override
    public void onAutoFocus(boolean paramBoolean, Camera paramCamera)
    {
 
        if (paramBoolean)
        {            
            paramCamera.takePicture(null, null, null, this);
 
        }
 
  }
 
    @Override
    public void onPreviewFrame(byte[] paramArrayOfByte, Camera paramCamera)
    {
       
    }
 
}
Заранее спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2016, 22:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задать качество фотографии (Программирование Android):

Получить качество сети - Программирование Android
Как можно получить качество сети? т.е. 3G, GPRS, EDGI, WCDMA и т.д...

Сканер фотографии - Программирование Android
Добрый день, появилась такая вот задачка, и не смог найти ответа в гугле, решил спросить здесь, может кто сталкивался с этим. Необходимо...

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

Прикрепление к письму фотографии из камеры - Программирование Android
В приложении есть три текстовых поля EditText: электронный адрес, тема письма, сам текст. По нажатию кнопки ниже письмо с помощью...

Android, отправка фотографии на сервер - Программирование Android
Мне нужно отправить файл на сервер. После выбора фотографии в галереи мы вызываем данный метод, которому передаем файл: public static...

Как отобразить папки, содержащие фотографии? - Программирование Android
Всем привет. Пытаюсь создать аналог галереи на android. Для этого мне нужно найти все фотографии(включая папки в которых они находятся) и...

3
SMore
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 44
04.12.2016, 13:10  [ТС] #2
Или есть хотя бы какой-то @Override метод, где задаются параметры фото? Скажите, пожалуйста.
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
05.12.2016, 12:24 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
SMore, может
Java
1
2
3
4
5
6
7
            Parameters params = camera.getParameters();
            params.setJpegQuality(q);
            params.setPictureSize(w, h);
            try {
                camera.setParameters(params);
            } catch (Exception e) {
            }
1
SMore
0 / 0 / 0
Регистрация: 08.11.2015
Сообщений: 44
05.12.2016, 20:37  [ТС] #4
Спасибо большое!
0
05.12.2016, 20:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2016, 20:37
Привет! Вот еще темы с ответами:

Как определить правильную ориентацию фотографии? - Программирование Android
На одном устройстве правильная ориентация фото получается при её повороте (Camera.Parameters::setRotation(int rotation) на 90 градусов, на...

Как по адресу фотографии fileUri получить Bitmap? - Программирование Android
Как можно по адресу фотографии fileUri получить Bitmap? мне все не найти как в коде расписать это дело

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

Можно ли улучшить качество фотографии - Photoshop
Можете, что-то сделать с этим фото, что бы оно красивее стало ) Версия автора Можете что то зделать з етим фото что б оно...


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

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

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