Изменение размера скриншота, который будет прикреплен к электронному письму - PullRequest
2 голосов
/ 02 ноября 2011

В настоящее время я создаю это приложение для Android, где буду делать снимок экрана «TableLayout» и отправлять его по электронной почте в виде вложения. Вот часть кода, которая делает снимок экрана.

Однако, когда я пытаюсь прикрепить файл, используя следующий код, он говорит, что «Размер файла слишком велик для вложения». Может кто-нибудь предложить какие-либо другие меры, которые я могу предпринять, кроме Bitmap.Compress, чтобы сделать мой размер файла еще меньше? Заранее спасибо!

private void getScreen()
            {
                View content = findViewById(R.id.TransactionLog);
                content.setDrawingCacheEnabled(true);

                content.buildDrawingCache(true);

                Bitmap bitmap = Bitmap.createBitmap(content.getDrawingCache());
                content.setDrawingCacheEnabled(false); // clear drawing cache

                File file = new File(Environment.getExternalStorageDirectory() + 
                         File.separator + "whatever2.png");



                        try 
                            {
                                file.createNewFile();
                                FileOutputStream ostream = new FileOutputStream(file);
                                bitmap.compress(CompressFormat.PNG, 0, ostream);
                                ostream.flush();
                                ostream.close();

                            } 
                        catch (Exception e) 
                            {
                                e.printStackTrace();
                            }


                }

Ответы [ 3 ]

2 голосов
/ 02 ноября 2011

Попробуйте использовать Bitmap.createScaledBitmap :

публичная статическая битовая карта createScaledBitmap (битовая карта src, int dstWidth, int dstHeight, логический фильтр)
С тех пор: Уровень API 1

Создает новое растровое изображение, масштабированное из существующего растрового изображения.
Параметры
src - Исходное растровое изображение.
dstWidth - желаемая ширина нового растрового изображения.
dstHeight - Желаемая высота нового растрового изображения.
filter - true, если источник должен быть отфильтрован.

К вашему сведению, параметр качества, передаваемый для сжатия, не влияет на размер файла при использовании CompressFormat.PNG. Попробуйте использовать CompressFormat.JPEG вместо этого, затем попробуйте другие значения качества.

В качестве альтернативы попробуйте это:
http://thinkandroid.wordpress.com/2009/12/25/resizing-a-bitmap/

0 голосов
/ 03 ноября 2011

Насколько велик ваш имидж?Изображение, сделанное из приложения и сохраненное в формате png, при условии, что оно не является скриншотом «картинки», должно быть довольно маленьким.Гораздо меньше, чем то, которое должно принимать электронное письмо, если только не существует сколь угодно маленького размера вложения.

Если в вашей таблице изображено изображение или оно немного отличается, вы можете рассмотреть jpeg вместо png.В противном случае, я думаю, что-то еще происходит.

0 голосов
/ 02 ноября 2011

Вы пытались использовать более высокое значение для параметра качества?(в настоящее время вы используете 0, и оно может доходить до 100).

Я предлагаю попробовать 80.

 boolean success = bitmap.compress(CompressFormat.PNG, 80, ostream);

Не забудьте проверить, успешно ли это (запишите возвратзначение этого метода).

Вы также можете попробовать использовать другой формат (jpeg?).

Чтобы упростить задачу, я предлагаю сначала попытаться сохранить его на SD-карте и проверитьесли размер чего-то, что вы ожидаете.У вас могут быть проблемы с кодом, который отправляет электронное письмо, или он не позволяет отправлять большие вложения.

...