java Android - 以编程方式处理图像缩放/裁剪

2023-12-03

好吧,所有这些事情折磨了我好几个星期,我将图像设置为 227 像素高,然后将其缩放到 170 像素,即使我每次都希望它是wrapp_content。

好的。在这里,我拍摄了 1950 像素长的“我的图像”(我将其中的一部分放在这里,以便您可以了解它应该是什么样子)。

enter image description here

首先,我想将其缩放回 227 像素高,因为这就是它的设计方式和应该的方式

Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ver_bottom_panel_tiled_long);
            int width = bitmapOrg.getWidth();
        int height = bitmapOrg.getHeight();
        int newWidth = 200; //this should be parent's whdth later
        int newHeight = 227;

        // calculate the scale
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;

        // create a matrix for the manipulation
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);

        // recreate the new Bitmap
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
                          width, height, matrix, true); 


        BitmapDrawable dmpDrwbl=new BitmapDrawable(resizedBitmap);

    verbottompanelprayer.setBackgroundDrawable(dmpDrwbl);

so... it's not a cropped image at all - no, it's 1950 pixels pressed into 200 pixels. enter image description here

但我只想剪切除这 200 像素或我设置的任何宽度之外的任何内容 - 裁剪它,而不是将所有这么长的图像压入 200 像素区域。

另外,BitmapDrawable(Bitmap 位图);和 imageView.setBackgroundDrawable(drawable);已弃用 - 我该如何更改?


根据我所看到的,您创建了新尺寸(200x227)的位图,所以我不确定您的期望。您甚至在评论中写道,您进行了缩放,但没有提及裁剪......

你能做的是:

  1. 如果 API 至少为 10 (gingerbread) ,您可以使用位图区域解码器, 使用解码区域 :

  2. 如果API太旧,您需要解码大位图,然后将其裁剪为新位图,使用Bitmap.createBitmap

像这样的东西:

final Rect rect =...
if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD_MR1)
  {
  BitmapRegionDecoder decoder=BitmapRegionDecoder.newInstance(imageFilePath, true);
  croppedBitmap= decoder.decodeRegion(rect, null);
  decoder.recycle();
  }
else 
  {
  Bitmap bitmapOriginal=BitmapFactory.decodeFile(imageFilePath, null);
  croppedBitmap=Bitmap.createBitmap(bitmapOriginal,rect.left,rect.top,rect.width(),rect.height());
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java Android - 以编程方式处理图像缩放/裁剪 的相关文章

随机推荐

  • 如何根据XML文件自动生成WPF控件?

    我有一个 Xml 文件 它告诉我必须添加到表单中的控件 但此 Xml 会动态更改 我需要更新表单 目前 我可以读取XML文件 但我不知道是否可以基于该文件自动创建表单 对的 这是可能的 WPF 提供了多种在 Xaml 或代码中创建控件的方法
  • Excel 的独立代码

    Can VBA编写代码以对任何操作执行操作Excel file 当我在中创建项目时视觉工作室 它要求一个Excel要链接到它的文件 我写的所有代码都在ThisWorkbook vb因此仅作用于Excel链接到项目的文件 Ideally I
  • 如何全屏滑动选定的网格图像

    我创建了一个网格视图图像应用程序 我想在图像滑动中显示所选图像 实际上我在我的应用程序中实现了图像滑动but问题是图像滑动从第一张图像开始 而不是从选定的图像开始 example 如果我选择第三张图像 则图像滑动应该从第三张图像开始 而不是
  • 缺少必需参数:aws_access_key_id、aws_secret_access_key

    我目前正在尝试在终端中运行我的测试套件 但出现以下错误 Missing required arguments aws access key id aws secret access key ArgumentError 我在我的项目中使用 C
  • Android HttpClient:NetworkOnMainThreadException

    我有下面的一些代码 protected void testConnection String url DefaultHttpClient httpclient new DefaultHttpClient HttpGet httpget ne
  • 用户帐户“root”的指定密码无效,或无法连接到数据库服务器

    我在 Windows Server 2012R2 上使用 Windows 平台安装程序 5 0 安装 WordPress 时遇到此错误 目前我在该服务器上有一个带有 mySQL 的 php 站点 运行良好 几个月前 作为设置该网站的一部分
  • 正则表达式将给定单词替换为两侧的空格或根本不替换

    我正在使用 PHP 中的一些代码 从搜索引擎获取引用数据 为我提供用户输入的查询 然后 我想从该字符串中删除某些停用词 如果存在 但是 该单词两端可能有也可能没有空格 例如 我一直使用 str replace 删除一个单词 如下所示 key
  • 绘制图像分类模型的混淆矩阵

    我用 keras 构建了一个图像分类 CNN 虽然模型本身运行良好 它可以正确预测新数据 但我在绘制模型的混淆矩阵和分类报告时遇到问题 我使用 ImageDataGenerator 训练了模型 train path DATASET TRAI
  • 我如何获取全局javascript变量中的ajax内容

    我想将内容放入javascript全局定义的变量中 我使用ajax调用获得的内容 http pastebin com TqiJx3PA 感谢您的任何建议 Pastebin 代码已经做到了这一点 我猜你实际面临的问题是存在的 因为你的 aja
  • 字符串格式为 yyyy-MM-dd HH:mm:ss Iphone

    我有一个 nsstring 见下文 NSString Mydate 9 8 2011 以月 日 年的格式 我希望这个字符串的格式yyyy MM dd HH mm ss 例如 2011 09 08 15 51 57 这样我需要以后面的格式在标
  • TensorFlow中重复训练和预测时如何避免OOM错误?

    我在 TensorFlow 中有一些代码 它采用一个基本模型 用一些数据对其进行微调 训练 然后使用该模型来predict 使用一些其他数据 所有这些都封装在一个main 模块的方法并且工作正常 然而 当我在不同的基本模型上循环运行此代码时
  • Bash 间接引用,其中一个 var 引用多个

    我试图取消引用单个变量中包含的两个或多个变量 但我不知道如何在没有 eval 的情况下执行此操作 b 5 c 10 a b c result eval echo a echo result 5 10 我希望执行相同的操作来给我 结果 这样我
  • 如何拦截window.location变化

    我需要一种方法将一些预处理附加到 window location 的每个分配 有没有办法做到这一点 我基本上需要序列化一些信息 这些信息将在新位置使用 您可以使用beforeunload事件触发您的代码在导航之前运行 如果您需要更具体的内容
  • ImportError: 在 windows7 32 位中运行 pip --version 命令时无法导入名称 main

    我已经安装了最新的 python 2 7 9 与 Windows 32 位的 pip 和 setuptools 捆绑在一起 我尝试重新安装 pip 但问题仍然存在 这是运行后的错误pip version在管理员cmd中 Traceback
  • 更改 UITextField 的默认触摸事件

    好吧 这就是我想做的 我有一个 UITextField 当我单击它时 我想调用我的方法之一 当我双击 用 1 根手指点击两次 它时 我想编辑文本字段 就像我在普通的 UITextField 上单击它一样 我不知道该怎么做 我正在考虑对 UI
  • C# - (int)Math.Round((double)(3514 + 3515)/2) =3514?

    大家好 int ai1 new int 2 3514 3515 void average1 List
  • Hibernate JPA 不支持@TableGenerator 的“initialValue”元素吗?

    TableGenerator name Emp Gen table ID GEN pkColumnName GEN NAME pkColumnValue Employee GEN valueColumnName GEN VAL initia
  • 从 Laravel 9 中的存储外观获取 S3Client

    我正在尝试将 S3 Multipart Uploader 从 Laravel 8 升级到 Laravel 9 并已按照文档中的概述升级到 Flysystem 3 并且没有依赖项错误https laravel com docs 9 x upg
  • 如何将AIRPLANE_MODE_ON设置为“True”或ON?

    我打算挂断电话 我发现这是解决该问题的方法之一 如何通过代码激活飞行模式 这样我就会根据某些事件挂断电话 请参阅博客文章Android 控制飞行模式 仅适用于API 16 Toggle airplane mode Settings Syst
  • java Android - 以编程方式处理图像缩放/裁剪

    好吧 所有这些事情折磨了我好几个星期 我将图像设置为 227 像素高 然后将其缩放到 170 像素 即使我每次都希望它是wrapp content 好的 在这里 我拍摄了 1950 像素长的 我的图像 我将其中的一部分放在这里 以便您可以了