关于bitmap文件生成

昨天一下午都在折腾这个bitmap文件,卡在了一个死角上。

想做的事情是用很多栅格点的数据生成灰度图像。

先把这些数据标准化到0-255之间;然后生成file文件,填写bitmap文件头,填写标准化后的栅格数据。

需要注意的有两点:

1,数据类型的转换,我是从float转为unsigned char,然后转为byte,因为很少接触byte类型,查了以后才知道byte和unsigned char其实是一样的。

2,bitmap文件头的填写。

可参考任一一个讲解bitmap文件结构的文档。http://lhbyron.bokee.com/652956.html

我做完这两个步骤,却发现生成图像失败。当时考虑可能的原因有:1,数据类型转换中出了问题;2,bitmap文件格式的问题。

测试了一下可以排除第一个可能。然后看第二种情况,我用ultraedit软件直接把生成的错误的bitmap文件打开,当然都是16进制的数据。然后我把这些16进制的数据跟bitmap文件头的格式一位一位的比对,最后发现错误的原因在于Bitmap Data Size设置错了,bitmap文件要求这个值必须是4的整数倍。改成4的整数倍以后,问题就解决了。看来位图像素的总数必须是4的整数倍。

总结了一下,还是自己太粗心,没有仔细地看bitmap文件结构。另外,UltraEdit这个软件还蛮好用的。

转载于:https://www.cnblogs.com/alethea/archive/2012/03/13/2394734.html

在 Android 开发中,将 `Drawable` 文件转换为 `Bitmap` 是一个常见的需求,特别是在需要对图像进行进一步处理或上传到服务器时。以下是实现这一目标的几种方法。 ### 使用 BitmapFactory 和 Resources 一种直接的方法是通过 `Resources` 类来获取资源,并使用 `BitmapFactory` 来解码资源文件为 `Bitmap` 对象。这种方法适用于从资源标识符(如 `R.drawable.sample`)加载图片。 ```java Resources res = getResources(); Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.sample); ``` 这段代码首先获取了当前应用的资源对象,然后利用这个资源对象和指定的资源 ID 来创建一个 `Bitmap` 实例[^2]。 ### 将 Bitmap 转换为 Byte Array 有时可能需要将 `Bitmap` 转换为字节数组,例如为了在网络上传输或者存储。可以使用 `ByteArrayOutputStream` 来完成此操作。 ```java private byte[] bitmapToBytes(Bitmap bm) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); return baos.toByteArray(); } ``` 这里定义了一个函数,它接受一个 `Bitmap` 参数并返回一个包含 PNG 格式压缩数据的字节数组。第二个参数 `100` 表示质量比例,对于 PNG 格式来说通常设置为 100 因为其无损特性。 ### Drawable 到 Bitmap 的转换 如果已经有了一个 `Drawable` 对象而不是资源 ID,则可以通过以下方式将其转换为 `Bitmap`: ```java Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); ``` 这条语句假设 `drawable` 是一个 `BitmapDrawable` 类型的对象。如果不是,那么你需要先确保你的 `Drawable` 可以被转换成 `BitmapDrawable` 或者采用其他方法来提取 `Bitmap`[^1]。 ### 从 Byte Array 创建 Bitmap 如果你有一个字节数组并且想要从中创建 `Bitmap`,你可以使用 `BitmapFactory.decodeByteArray()` 方法: ```java private Bitmap bytesToBitmap(byte[] bytes) { if (bytes != null && bytes.length > 0) { return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); } else { return null; } } ``` 这个辅助函数检查传入的字节数组是否有效,然后尝试从中解码出一个新的 `Bitmap` 实例。 以上就是几种在 Android 应用程序中将 drawable 文件转换为 bitmap 的常用技术。根据具体的应用场景和个人偏好选择合适的技术即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值