处理大位图

2024-03-10

我只想从我的应用程序打开本机相机应用程序来捕获照片并将其设置为屏幕的背景图像,然后单击按钮旋转它。如果使用 3MP 相机拍摄,照片会旋转 n 次。如果我将相机分辨率设置为 5MP 或更高,应用程序将在第五次单击按钮时强制关闭(照片旋转 4 次)。

Bitmap rotatedBitmap = null; 
int curAngle = 0; 

private Bitmap rotateImageBitmap(Bitmap capturedPhotoBitmap) {       

if(rotatedBitmap != null  ) 
{ 
    rotatedBitmap = null; 
} 

Matrix matrix = new Matrix(); 
curAngle = (curAngle + 90) % 360; 
matrix.postRotate(curAngle); 
rotatedBitmap =  Bitmap.createBitmap(capturedPhotoBitmap, 0, 0,  capturedPhotoBitmap.getWidth(),  capturedPhotoBitmap.getHeight(), matrix, true); 

return rotatedBitmap;         
 } 

这是来自开发者指南......

1. 移动设备通常具有有限的系统资源。 Android 设备可供单个应用程序使用的内存只有 16MB。

2. 位图占用大量内存,尤其是对于照片等丰富的图像。例如,Galaxy Nexus 上的相机可拍摄高达 2592x1936 像素(5 兆像素)的照片。如果使用的位图配置是 ARGB_8888(从 Android 2.3 开始的默认值),则将此图像加载到内存中大约需要 19MB 内存(259219364 字节),立即耗尽某些设备上的每个应用程序的限制。

现在大多数手机都配备 8mp 或更高的摄像头。所以图片会很大。如何在不影响相机分辨率的情况下将照片旋转“n”次。我需要压缩它吗?什么是最好的方法?


我不会将图像放在 RAM 堆上,而是将图像加载(读取:缓冲)到应用程序缓存目录中的磁盘上。http://developer.android.com/reference/android/content/Context.html#getCacheDir() http://developer.android.com/reference/android/content/Context.html#getCacheDir()

将图像存储到磁盘上后,我会使用样本大小将其膨胀到内存中以减少内存消耗。

See http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize and http://developer.android.com/reference/android/graphics/BitmapFactory.html http://developer.android.com/reference/android/graphics/BitmapFactory.html

您选择的样本大小与位图的大小(以像素为单位)以及要将图像加载到的视图的大小(以像素为单位)相关。

要查找图像的尺寸,请使用 BitmapFactory.Options 对象中的“inJustDecodeBounds”选项。

请记住,您选择的样本大小应该是 2 的幂。数字越大,节省的内存越多,但图像质量越低。

样本大小 2 = 1/4 大小。样本大小 4 = 1/16 大小,依此类推。

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

处理大位图 的相关文章

随机推荐

  • a、&a 和 &a[0] 之间的类型区别是什么?

    include
  • 如何从 Dom4j Node.selectObject 或 Node.selectNodes 获取字符串列表

    希望你有美好的一天 Dom4j javadoc 表单Node selectObject String xpathExpression 说如下 返回的对象可以是一个或多个 Node 实例的列表 也可以是标量对象 例如String或 Numbe
  • TortoiseHg 更新后 Mercurial 无法工作

    我最近将 TortoiseHg 更新到 2 0 3 使用 Mercurial 1 8 2 更新后 Mercurial 不再通过命令行 Windows 7 x64 运行 但可以通过 TortoiseHg GUI 运行 尝试通过命令行使用任何
  • 如何从 Instagram API 获取历史数据

    我正在制作一个 Instagram 分析网络应用程序 我仔细阅读了所有 Instagram API 端点 但找不到任何方法来获取历史数据 即一段时间内的关注者 我所需要的只是一个类似日期的东西 附加到每个关注者对象上 不过 有一些 Inst
  • 如何控制rpmbuild的buildroot和安装目录

    我对 rpmbuild 中的一些目录感到困惑 1 buildroot 用于存储最终用户安装二进制包时应安装的文件 问题 如何控制这个目录 构建根是什么意思 cat 3 spec BuildRoot opt abc prep echo bui
  • 数字轴 setTickUnit 包含指定数字

    我使用 JFreeChart 显示正态分布 并将刻度数更改为标准差 但我也希望在刻度出现的中间始终存在 平均 值 交叉发布 所以标准差 2 平均值 1 3 1 1 3 5 标准差 5 平均值 15 0 5 10 15 20 25 30 JF
  • 递归 - 如何生成给定 n 和 k 的所有序列

    给定 n 和 k 我需要生成以下所有序列 n 5 k 2 0 1 2 0 1 3 0 1 4 1 2 3 1 2 4 2 3 4 另一个例子 n 5 k 3 0 1 2 3 0 1 2 4 0 1 3 4 0 2 3 4 1 2 3 4 我
  • 如何实现自动生成id的功能?

    我尝试创建一个函数来在 sql 表中生成 id 但我不知道如何设置选择表和列的参数 请帮助我 Public Function autoid ByVal col As String ByVal txt As TextBox ByVal tb
  • 使用具有作用域在函数内部的匿名类的模板

    假设我有以下片段 template
  • 如何在ListView中插入对象类型?

    我想在 ListView 中维护 ID 和对象类型 我正在尝试这样做 lstView Items Insert MyObject can t do this because it takes only Int and String 就我而言
  • 使用 Jelly Bean 的简单安全配对(蓝牙)与 NFC 配对

    截至 io2012 和JellyBean 文档 http www android com about jelly bean 现在有一种通过 NFC 配对蓝牙设备的方法 这听起来确实不错 但我找不到任何有关它的文档 我特别想知道这是否适用于不
  • Python:从图像中删除 Exif 信息

    为了减小网站中使用的图像大小 我将质量降低到 80 85 这在一定程度上大大减小了图像尺寸 为了在不影响质量的情况下进一步减小尺寸 我的朋友指出 来自相机的原始图像有很多称为 Exif 信息的元数据 由于网站中的图像不需要保留此 Exif
  • iOS Geofence CLCircularRegion 监控。 locationManager:didExitRegion 似乎没有按预期工作

    我目前正在尝试让我的应用程序使用以下方式监视特定区域CoreLocation然而我发现它似乎没有按预期工作 在我看来 它不能在每个位置设置较小的小半径 即 10m 的情况下工作 我还制作了一个小测试应用程序 它绘制了圆半径在地图上 这样我就
  • 包含文件存储在哪里 - Ubuntu Linux、GCC

    因此 当我们执行以下操作时 include
  • 如何检查 numpy 数组是否已经存在?

    我想知道数组是否已经在代码中的某个位置定义过 就像是a exist 如果存在则给出 True 如果不存在则给出 False I tried a size 但是如果该数组尚不存在 它会给出一条错误消息 这是我想避免的 如果您想知道的话 要求这
  • 如何更改ionic 2本地推送通知图标?

    我使用创建了一个混合应用程序ionic2因为我正在使用科尔多瓦本地推送通知 一切都工作正常 唯一的问题是无法更改图标 在下面我将我的代码粘贴到这里 LocalNotifications schedule id 1 title Test Ti
  • 删除等值线图上的边缘线

    我用Matlab创建了一个极坐标并将其转换为笛卡尔坐标 th r meshgrid 0 0 5 360 pi 180 0 02 1 X Y pol2cart th r 我获取该网格上的数据并生成contourf绘制它 我的问题是我在轮廓图中
  • 从 NSDictionary 转换为 [String:Any?]

    我正在使用 xmartlabs Eureka 构建一个具有动态表单的应用程序 为了填写表格 我必须使用setValues values String Any 但我有表单值NSDictionary变量 我无法将其转换为 String Any
  • 在 Windows 中获取另一个进程命令行

    我正在尝试获取另一个进程的命令行参数 在 WinXP 32 位上 我执行以下操作 hProcess OpenProcess PROCESS QUERY INFORMATION PROCESS VM READ PROCESS TERMINAT
  • 处理大位图

    我只想从我的应用程序打开本机相机应用程序来捕获照片并将其设置为屏幕的背景图像 然后单击按钮旋转它 如果使用 3MP 相机拍摄 照片会旋转 n 次 如果我将相机分辨率设置为 5MP 或更高 应用程序将在第五次单击按钮时强制关闭 照片旋转 4