Android:调整位图大小而不损失质量

2023-12-20

在发布之前我确实搜索了整个网络。我的问题是,我无法在不损失图像质量的情况下调整位图大小(质量非常差并且像素化)。

我从相机获取位图,然后必须缩小它的尺寸,这样我就可以更快地将其上传到服务器。

这是进行采样的函数

public Bitmap resizeBitmap(Bitmap bitmap){
         Canvas canvas = new Canvas();
         Bitmap resizedBitmap = null;
         if (bitmap !=null) {
                int h = bitmap.getHeight();
                int w = bitmap.getWidth();
                int newWidth=0;
                int newHeight=0;

                if(h>w){
                    newWidth = 600;
                    newHeight = 800;
                }

                if(w>h){
                    newWidth = 800;
                    newHeight = 600;
                    }

                float scaleWidth = ((float) newWidth) / w;
                float scaleHeight = ((float) newHeight) / h;



                Matrix matrix = new Matrix();
                // resize the bit map
                matrix.preScale(scaleWidth, scaleHeight);

                resizedBitmap  = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);



                Paint paint = new Paint();
                paint.setAntiAlias(true);
                paint.setFilterBitmap(true);
                paint.setDither(true);

                canvas.drawBitmap(resizedBitmap, matrix, paint);



            }


        return resizedBitmap;   

这就是我从活动结果中获取图像的方式

 protected void onActivityResult(int requestCode, int resultCode,
             Intent data) {
         if(resultCode != RESULT_CANCELED){

         if (requestCode == 0) {
             if (resultCode == RESULT_OK) {


                    getContentResolver().notifyChange(mImageUri, null);
                    ContentResolver cr = this.getContentResolver();

                    try
                    {
                        b = android.provider.MediaStore.Images.Media.getBitmap(cr, mImageUri);
                        Log.d("foto", Integer.toString(b.getWidth()));
                        Log.d("foto", Integer.toString(b.getHeight()));
                        addPhoto.setImageBitmap(b);

                    }
                    catch (Exception e)
                    {
                        Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT).show();
                        Log.d("TAG", "Failed to load", e);
                    }



             }
         }

我开始认为获得小图片尺寸的最佳方法是设置相机分辨率。还有其他人可以帮忙吗?


一个好的缩小算法(不像最近邻算法)仅包含 2 个步骤(加上输入/输出图像裁剪的精确 Rect 的计算):

  1. 缩小规模使用BitmapFactory.Options::inSampleSize->BitmapFactory.decodeResource()尽可能接近但不低于您需要的分辨率
  2. 通过使用稍微缩小尺寸来获得精确的分辨率画布::drawBitmap()

以下是索尼移动如何解决此任务的详细说明 https://web.archive.org/web/20171011183652/http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application/

这是 SonyMobile 秤实用程序的源代码 https://web.archive.org/web/20140227233706/http://developer.sonymobile.com/downloads/code-example-module/image-scaling-code-example-for-android/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:调整位图大小而不损失质量 的相关文章

  • 为什么下面代码的输出是Thread[main,5,main]

    public class test1 public static void main String args TODO Auto generated method stub Thread t Thread currentThread Sys
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • Servlet 调度程序当前不可用

  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • Java LRU 缓存使用 LinkedList

    堆栈溢出的新手 所以请不要介意我以菜鸟的方式问这个问题 我正在尝试使用链表实现 LRU 缓存 我在这里看到了使用 linkedHashMap 和其他数据结构的其他实现 但对于这种情况 我正在尝试使用链表创建最佳优化版本 正如我在技术期间被问
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • javax.xml.bind.JAXBException: 类 *** 及其任何超类在此上下文中均未知

    我正在尝试通过 REST Web 服务传递对象 以下是我的课程 使用一些示例代码解释了我需要的功能 Rest Web 服务类方法 POST Path find Consumes MediaType APPLICATION FORM URLE
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • 如何在速度模板中检索哈希图值

    如何从速度模板中的以下哈希图中检索值 请帮忙 LinkedHashMap
  • while 之后无法访问的语句[重复]

    这个问题在这里已经有答案了 我只是修改代码 在以下代码中出现错误 int x 1 System out println x x while true x System out println x x 错误在最后一行 我可以知道错误 错误 无
  • Android - 检测视图上的双击和三次点击

    我一直在尝试构建一个可以检测双敲击和三敲击的敲击检测器 在我的努力失败后 我在网上搜索了很长时间以找到可以使用的东西 但没有运气 奇怪的是 像这样的图书馆如此稀缺 有什么帮助吗 你可以尝试这样的事情 尽管我通常建议不要使用三次点击作为一种模
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • Android:选择 EditField 上焦点上的所有文本

    我试图让 Android 在获得焦点时选择 EditText 字段中的所有文本 我在布局中使用此属性 在两个字段上 android selectAllOnFocus true 我不确定这是否相关 但为了将光标移动到第一个可编辑字段 前面 还
  • 在 VideoView 开始播放之前,TextView 不会显示

    我编写了一个android应用程序 它有两个视图 TextView上方的VideoView 位于ScrollView内部 我遇到了一个问题 直到VideoView开始播放视频 TextView才显示 并且我有一个黑屏 这可能需要很长一段时间
  • 片段中的 SavedInstanceState 始终为 null

    我使用 XML 以及活动中的 setContentView 将片段附加到活动 A 有一个问题 因为我的片段中有非常动态的视图 所以当方向改变时 我必须恢复所有的观点状态 我有问题 因为我正在使用类似的东西 public void onSav
  • FCM 主题是否适合更多用户?

    我对使用主题消息有点困惑 我的场景是根据通知触发一些作业 请帮助我更多地了解这一点 如果我们正在处理大量用户 则可以使用 FCM 主题向用户发送通知 我们可以只使用数据消息和主题消息吗 使用主题发送的消息是否保证送达 我在 FCM 文档中看
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException

随机推荐

  • 选择器反应缓慢 - 有时在开始下一个活动之前根本不触发

    我定义了这个选择器
  • jquery/javascript 如何更快地计算宽度

    我有一个有 100 列的表 我正在遍历所有 th 元素 以显式设置每个 th 元素的宽度 var ths table th ths each function i th var th th var width th width th wid
  • Django:无法连接到 Microsoft SQL Server

    我无法使用 Django 版本 1 11 3 连接到 MS SQL 服务器 这是错误 我似乎收到了 django db utils OperationalError 08001 u 08001 unixODBC FreeTDS SQL Se
  • 知道 C 语言的跨平台套接字库(Windows 和 Linux)吗?

    我希望在 Linux 和 Windows 中进行套接字通信 侦听 接受 连接 接收 发送 断开连接 我的项目是用 C 语言编写的 因此除非有人能想到一种方法让我将 C 库集成到 C 项目中 否则该库也必须用 C 语言编写 最终 我希望该库能
  • 找不到文件“twitter/bootstrap”(ROR)

    链接在这里https github com Gtar69 games https github com Gtar69 games I got a problem 我已经完成了如下采购 在 Gemfile 中 gem bootstrap sa
  • $ 和 $.fn 有什么区别?

    我很好奇 不知道之间的区别 and fn 谁能详细向我解释一下吗 还有什么是 fn 是一个函数 具体来说 是一个指向jQuery函数 别名 fn是该函数的一个属性 它指向内部函数的原型initjQuery 用于创建实例的函数 正如我们在 j
  • 当时间落在时间范围内时返回 True?

    我正在制作一个函数来检查 24 小时格式的时间范围内的时间 但是我的代码有一些问题 有人可以指出如何修复吗 My code bool isDoTime int starthour int startminute int endhour in
  • CreateIoCompletionPort 中的并发线程数

    On MSDN 页面CreateIoCompletionPort http msdn microsoft com en us library aa363862 28v VS 85 29 aspx该函数的最后一个参数有一个非常简短的描述 并发
  • 在 ngFor 中声明变量

    在我的 angular2 项目中 我需要呈现一个矩阵 这是我当前的代码 tr td class worker lastName br worker firstName td td class sk table sub header div
  • redshift Convert_timezone 不起作用

    使用 Razor SQL 运行 Redshift 查询时 UTC 日期似乎被视为本地时区 并包含夏令时 例如 运行 SELECT first CONVERT TIMEZONE UTC America New York 2016 03 27
  • 方法“ToString”没有重载需要 1 个参数

    我有一个数据读取器来从数据库读取数据 我正在从销售表中读取 TotalPrice 我想将总价显示为小数点后两位 该代码是一些链接 TotalPrice Text myReader TotalPrice ToString N2 但是我遇到了这
  • Android JSONArray 循环

    这是我从网络服务得到的结果 year 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1998 1997 1996 1995 1
  • 并行 make:将 -j8 设置为默认选项

    我可以使用以下命令设置构建过程的线程数 j争论 比如我有4核 4虚拟 当我写的时候 make j8速度增加4倍 是否可以将该值设置为默认值 例如 在Linux Gentoo中 在配置文件中 可以设置这个默认值 附注我有 Arch Linux
  • Windows 10 高分辨率屏幕上的 Spyder 界面图标非常小

    我有一台全新的笔记本电脑 分辨率为 3840 x 2160 运行 Windows 10 在安装 Anaconda Spyder 进行 python 编码后 我注意到图标非常小 对象检查器部分的文本也非常小 有没有办法来解决这个问题 这似乎与
  • 如何在 ANSI C 的结构中使用枚举?

    下面的代码必须在主函数中使用 但我不知道它是如何使用的 struct SomeItem enum MOVIE MUSIC itemType union struct Movie movie struct Music music 该结构用于带
  • Highchart js 最多可绘制 15 个图

    我在 Highchart js 中进行了很多尝试 但仍然找不到减少系列中元素数量的方法 如果我获得超过 15 天的数据 我必须将其减少并以 15 天的数据形式向用户显示 以便用户可以在不拥挤的情况下查看数据 该系列最多有 90 天 我必须减
  • IntelliJ IDEA 仅运行/调试一个文件

    我在 IntelliJ IDEA 中有一个 JAVA 项目 有多个包 但我的包中的某些文件有自己的main 方法并且可以自己运行 但是 如果我右键单击给定文件并选择 调试 运行 File main IntelliJ 将尝试构建包中的所有文件
  • ASP.NET MVC 3 中是否可以有多个依赖解析器?

    ASP NET MVC 3 中是否可以有多个依赖解析器 类似于 ModelBinder 和 Provider 的情况 我可以想到一种场景 拥有多个 容器 或 解析器 是有用的 那就是多租户 通过多租户 您可以在同一个 Web 应用程序中运行
  • 禁用 g++ 的返回值优化

    我需要在命令行上使用什么标志来禁用 g 编译器自动启用的返回值优化 fno elide constructors C 标准允许实现省略创建临时对象 该临时对象仅用于初始化相同类型的另一个对象 指定此选项会禁用该优化 并强制 G 在所有情况下
  • Android:调整位图大小而不损失质量

    在发布之前我确实搜索了整个网络 我的问题是 我无法在不损失图像质量的情况下调整位图大小 质量非常差并且像素化 我从相机获取位图 然后必须缩小它的尺寸 这样我就可以更快地将其上传到服务器 这是进行采样的函数 public Bitmap res