android Bitmap类的使用

android Bitmap类的使用,第1张

兄弟,你不能把android当Windows用的,"E:\\mpng"是个什么路径?
如果你把图放在外存的根目录,应该这样用:
³获得外部存储器存储目录
File sdCard = EnvironmentgetExternalStorageDirectory();
³设置路径
String s = sdCardgetAbsolutePath() +"/mpng";
权限也要加上:
<uses-permission android:name="androidpermissionREAD_EXTERNAL_STORAGE"/>

在网上有一道面试题大概意思就是: 存在十亿个数字,现在需要知道哪些数字没有出现在里面 这个问题你可能觉得一个for循环就能解决,但是实际上你可能忽略了一个问题,那就是10亿个数字需要占据的内存空间例如在java中要存下10亿个数字需要多大空间呢假设使用int存储,一个int占32个位也就是4个字节存放10亿个数字则需要: 10亿4/1024/1024/1024 = 4G左右 面对上面的问题我们肯定不能使用这种方式存储而使用我们的Bitmap就能很好的解决上面的问题

Bitmapi简单的说就是使用bit(位)来存储状态,适合用来存储大规模的数据,但是状态又不是很多的情况举例来说,如果我现在有 1,3,4,2,7 这五个数字,如果我们使用5个int来存储则需要20个字节的空间但是我现在使用1字节就能存储上面的五个数字如下图所示,1个字节可以用8位表示,1位有0和1两种值分别用来表示该位上是否有值,而位的索引用来表示数字(图中以从左到右的顺序计算)
而它的缺点同样也比较明显它的一个位只能存储一个数据,对于重复的数据无法记录如果数据分布很稀疏,会造成空间的浪费例如,如果现在只有{1,3,1000000000}这个三个数据,它有很多空间会被浪费掉

BitMap在java中提供了BitSet的实现,同时在我们平常使用的Redis中也有实现它很适合用来做大量的用户统计例如统计登录人数,签到,在线等等这些需求都可以通过redis的bit相关指令很简单的就能实现
例如,统计网站的在线人数:

上面的方式不仅简单,而且就算用户数量很大也能又快又好的完成

1
GDI+
一定要使用UNICODE,所以
stdafxh
中要先设置
#define
UNICODE
2
位图Bitmap可以直接加载
Bitmap

tmpBitmap
=
Bitmap::FromResource(_ModuleGetResourceInstance(),MAKEINTRESOURCE(IDB_BITMAP1));
_ModuleGetResourceInstance()
是WTL中的运行环境
3GDI+中
BitMap是继承Image的,因此GDI+的
DrawIamge可以直接引用,比如
DrawImage(tmpBitmap,100,100);

使用CreateCompatibleBitmap是为了初始化一张画布出来。使用HBITMAP直接载入到HDC兼容设备中时,HDC兼容设备会生成一块和大小相同尺寸的画布,超过那块矩形之外的地方是没有内容的。而对于没有经过HBITMAP直接载入过的HDC兼容设备,虽然使用BITBLT把其他HDC中的内容放入其中不会报错,但是由于没有载入过,它的画布区域也就是实际有效的矩形区域的宽和高都为0,即使经过了BITBLT这个过程,也无法成功将BMP放入其中。
所以需要使用CreateCompatibleBitmap来先模拟初始化一块画布才能正确的用于显示


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12606108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存