【问题标题】:Resizing a screenshot to be attached to an email调整要附加到电子邮件的屏幕截图的大小
【发布时间】:2011-11-02 19:42:30
【问题描述】:

我目前正在构建这个 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();
                            }


                }

【问题讨论】:

    标签: android eclipse resize screenshot


    【解决方案1】:

    尝试使用Bitmap.createScaledBitmap

    public static Bitmap createScaledBitmap (Bitmap src, int dstWidth, int dstHeight,布尔过滤器)
    自:API 级别 1

    创建一个新的位图,从现有位图缩放。
    参数
    src - 源位图。
    dstWidth - 新位图的所需宽度。
    dstHeight - 新位图的所需的高度。
    filter - 如果应该过滤源,则为 true。

    仅供参考,当您使用 CompressFormat.PNG 时,传递给 compress 的质量参数不会影响文件大小。尝试改用CompressFormat.JPEG,然后尝试不同的质量值。

    或者,试试这个:
    http://thinkandroid.wordpress.com/2009/12/25/resizing-a-bitmap/

    【讨论】:

    • 我认为这应该可行。但是你能解释一下“src”参数吗?比如,我应该为此传递什么值?
    • 阅读我在回答中链接到的 API 文档。它告诉你'src'参数需要是一个位图,所以你可以传入你的位图变量。
    【解决方案2】:

    您是否尝试过为质量参数使用更高的值? (目前您使用的是 0,它可能会上升到 100)。

    我建议尝试 80。

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

    不要忘记测试它是否成功(记录该方法的返回值)。

    您也可以尝试使用其他格式(jpeg?)。

    为了简单起见,我建议您先尝试将其保存到 sdcard 并检查大小是否符合您的预期。您可能对发送电子邮件的代码有一些问题,或者它可能不允许您发送大附件。

    【讨论】:

    • 我想知道设置质量为0会不会让它根本不压缩。
    • 不幸的是,提高质量也会增加文件的大小......我之前将其设置为 100,从那时起,由于文件大小,文件没有被附加。
    • 仅供参考,使用 CompressFormat.PNG 压缩时会忽略质量参数(因为它是一种无损压缩算法)。
    【解决方案3】:

    你的图片有多大?由应用程序制作的图像,保存为 png,假设它不是“图片”的屏幕截图,应该非常小。远小于电子邮件应该能够接受的大小,除非附件大小任意小。

    如果您的表格中的内容是图像,或者有相当多的差异,您可能会考虑使用 jpeg 而不是 png。否则,我的猜测是发生了其他事情。

    【讨论】:

    • 这也是让我困惑的地方。我的表只有 5 列和 5 行数据。因此它的屏幕截图也不应该那么大。但是,每次我的电子邮件功能打开时,屏幕底部都会出现一个小吐司,说文件太大。令人惊讶的是,我知道该文件存在,否则根本不会调用“sendmail”函数……但是,我无法使用 DDMS 物理访问该文件。
    • 如果您的文件在 sdcard 上,您可以访问它。使用 adb shell,然后使用命令行 (cd /mnt/sdcard;ls -l what*)。另外,只是一个建议。而不是 new File(Environment.getExternalStorageDirectory() + File.separator + "whatever2.png") 做 new File(Environment.getExternalStorageDirectory(), "whatever2.png") 第一个 arg 是一个 File 对象,它充当父对象.更容易做(ish)。
    • 表格中究竟有什么内容?只是文字? png 输出将非常小。我很确定还有其他事情发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多