bitmap的实现方法
bitmap是一个十分有用的结构。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct bitmap {
size_t capacity;
char* bit_array;
}bitmap_t; int bitmap_init(bitmap_t* bitmap, const size_t capacity) {
if (!bitmap) {
return -;
}
//bitmap->capacity = capacity >>3 + 1;
size_t alloc_size = capacity >> + ;
bitmap->capacity = capacity;
char* ptr = (char*)malloc(alloc_size);
if (!ptr) {
return ;
}
memset(ptr, , alloc_size);
bitmap->bit_array = ptr;
return ;
} void get_index(const int index, int* high_pos,
char* low_pos) {
*high_pos = index >> ;
*low_pos = index & 0x7;
}
int bitmap_get(const bitmap_t* bitmap, const int index) {
int high_pos;
char low_pos;
get_index(index, &high_pos, &low_pos);
if (high_pos >= bitmap->capacity) {
return -;
}
char value = bitmap->bit_array[high_pos];
return (value &(0x1<< low_pos));
}
int bitmap_data(const bitmap_t* bitmap, const int index) {
return ;
}
int bitmap_set(bitmap_t* bitmap, const int index) {
int high_pos;
char low_pos;
get_index(index, &high_pos, &low_pos);
if (high_pos >= bitmap->capacity) {
return -;
}
bitmap->bit_array[high_pos] |= (<<low_pos); return ;
} int main(int argc, char * argv[]) {
int array[] = {,,,,,,,,,,,,
,,,,,,,,};
int range = ;
const int len = sizeof(array)/sizeof(array[]);
bitmap_t bitmap;
bitmap_init(&bitmap, range);
for (int i = ; i < len; ++i) {
bitmap_set(&bitmap, array[i]);
printf("set_value = %d\n", array[i]);
}
for (int i = ; i < range; ++i) {
if (bitmap_get(&bitmap, i) > ) {
printf("get_value = %d\n",i);
} }
return ;
}
bitmap的实现方法的更多相关文章
- Android处理Bitmap的一些方法
http://www.it165.net/pro/html/201305/5795.html # 文件与Bitmap间的方法 1. 从文件载入Bitmap 01./** 02.* @brief 从文件 ...
- 异步加载图片以及Bitmap相关处理方法
私类: // 异步更新Image private class GetImageTask extends AsyncTask<String, Void, Bitmap> { // 覆写的方法 ...
- 是否需要主动调用Bitmap的recycle方法
一个Bitmap使用完后,是只需要等它成为垃圾后让GC去回收,还是应该主动调用recycle方法呢?或者说,主动调用recycle方法是否有好处,是否能马上回收内存呢? 带着这个问题来看源码(我看的4 ...
- android中Bitmap的放大和缩小的方法
android中Bitmap的放大和缩小的方法 时间 2013-06-20 19:02:34 CSDN博客原文 http://blog.csdn.net/ada168855/article/det ...
- 浅谈Android下的Bitmap之大Bitmap加载
引言 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用.Android程序的性能和内存问题,大部分都和图片紧密相关,而图片的加载在很多情况下很用 ...
- C# Bitmap deep copy
今天在研究一个关于 Bitmap deep copy 的问题, 经过一系列的查询,在StackOverFlow上面找到了答案,遂记录下来: public static Bitmap DeepCopyB ...
- CBitmap、HBITMAP、BITMAP相互转换
一:理解 BITMAP是C++中定义的位图结构体 HBITMAP是Windows中使用的位图句柄 CBitmap是MFC封装的位图类 二:相互转换 1.HBITMAP->CBitmap 方法一: ...
- drawable以及Bitmap的基本操作
一.drawable 图形对象,可以转载常用格式的图像,可能是(位图)Bitmapdrawable,或者shapedrawable(图形),还可能是多种其他图片格式GIF,PNG,JEPG 二.Bi ...
- Android图像处理之Bitmap类
Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现 ...
随机推荐
- IIS发布报错
IIS发布报错一般原因 ISAPI和CGI限制作为IIS与ASP.NET的连接桥梁
- windows2003 iis6.0站点打不开,找不到服务器或 DNS 错误。
最近服务器经常出现打不开网站的现象,有时出现在上午,有时出现在中午,几乎天天都会出现一次,出现问题时,无论是回收程序池还是重启IIS或者关闭其它一些可能有影响的服务,都不能解决问题.网站打不开时,有如 ...
- Fragment 和 FragmentActivity的使用(二)
今天继续完成剩下的学习部分,现在项目很多地方使用viewpager来提供滑动,今天记录学习viewpager配合fragment的显示,增加一个CallLogsFragment配合之前SMSLis ...
- axis : java.lang.NoSuchMethodError
Hi friends,Iam getting the following error when deploying my app in jboss error.Iam new to axis .can ...
- bzoj4046
分组赛的题……madan原题,考试想不出来真是SB得不行 首先,从大往小加边,每次加边如果成环必然弹出环上最大边 考虑询问[x,y],如果边权在[x,y]的边弹出了小于等于y的边j,说明j不在最小生成 ...
- ZOJ 2587 Unique Attack (最小割唯一性)
题意 判断一个无向图的割是否唯一 思路 错误思路:一开始想的是判断割边是否都是关键割边,那既然割边两端点能连通S.T点的边是关键边,那么只要遇到有某个边两端点不连通S or T则这条边就不是关键割边( ...
- UVA 350 Pseudo-Random Numbers 伪随机数(简单)
题意:给定Z, I, M, L,根据随机数产生式k=(Z*L+I)%M.但是L表示的是上一个产生的数,比如根据产生式产生了序列{2,5,4,3}那么5是由L=2算来的,4由L=5算来的..第1个所产 ...
- django - 替换admin的textarea为 富文本
1. 安装这个:https://github.com/pydanny/django-wysiwyg 2. 下载你希望的 编辑器,到你的指定路径STATIC_ROOT [详细后面补充]
- IPicture、BITMAP、HBITMAP和CBitmap的关系
1.有关IPicture加载图片后直接Render到内存DC的问题(HBITMAP转换IPicture)Picture的方法get_Handle可以直接得到图片的句柄 IPicture *pIPict ...
- 视频捕捉全教程(vc+vfw)
目 录 一. 视频捕获快速入门 二.基本的捕获设置 1.设置捕获速度: 2.设置终止捕获 3.捕获的时间限制 三.关于捕获窗口 1.创建一个AVICAP捕获窗口 2.将一个捕获窗口连接至捕获设备 3. ...