C++实现位图

#pragma once

#include <vector>

class BitMap
{
public:
	BitMap()
		:_size(0)
	{}

	void Resize(size_t size)
	{
		_a.resize((size>>5) + 1);
	}

	void Set(size_t x)
	{
		size_t index = x>>5;
		size_t n = x % 32;

		_a[index] |= (1<<n);

		++_size;
	}

	void Reset(size_t x)
	{
		size_t index = x>>5;
		size_t n = x % 32;

		_a[index] &= (~(1<<n));

		--_size;
	}

	bool Test(size_t x)
	{
		size_t index = x>>5;
		size_t n = x % 32;

		return _a[index] & (1<<n);
	}

	size_t Size()
	{
		return _size;
	}

protected:
	vector<size_t> _a;
	size_t _size;
};

void BitMapTest()
{
	BitMap bitmap;
	bitmap.Resize(65);
	bitmap.Set(65);
	bitmap.Set(1);
	bitmap.Set(4);
	bitmap.Set(45);

	cout<<"65?"<<bitmap.Test(65)<<endl;
	cout<<"1?"<<bitmap.Test(1)<<endl;
	cout<<"4?"<<bitmap.Test(4)<<endl;
	cout<<"45?"<<bitmap.Test(45)<<endl;
	cout<<"25?"<<bitmap.Test(25)<<endl;

	cout<<endl<<"Reset(65)"<<endl;
	bitmap.Reset(65);
	cout<<"65?"<<bitmap.Test(65)<<endl;

	cout<<endl<<"Size:"<<bitmap.Size()<<endl;
}
#include <iostream>
using namespace std;
//#include "HashTablesBucket.h"
#include "BitMap.h"
int main()
{
	//TestDic();
	//Test();
	BitMapTest();

	return 0;
}

时间: 2024-10-12 11:10:02

C++实现位图的相关文章

将位图导入为ArcGIS面要素

本文根据笔者经验,介绍一种从位图图像导入ArcGIS称为要素的方法.这种方法适用于从现有出版物图片中获取地理信息的情况. 首先要说明的是,从位图导入要素是非常非常不精确的方式,如果有其它数据来源,那么就不应该采用此方法. 另外,如果位图包含的内容相对简单,区域结构紧凑不零散,则可以考虑ArcMap绘制地图,而不用此方法. 为让表述更直观,笔者从百度卫星地图截取了 辽宁省康平县 西泡子水库附近的区域,作为操作的说明. 00_orign 1. 制作灰度图 为便于在ArcMap中处理,将原始图像的色彩

WPF Canvas转换为位图 (RenderTargetBitmap)

使用 RenderTargetBitmap 的注意事项: 要渲染的Canvas元素要放在Border元素内,并且此Border元素不能设置边框宽度(BorderThickness),不然生成的位图会出现错误.如果需要边框效果,可再加一层Border. 例: cs: RenderTargetBitmap bmp = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96, PixelForma

【Bitmap Index】B-Tree索引与Bitmap位图索引的锁代价比较研究

通过以下实验,来验证Bitmap位图索引较之普通的B-Tree索引锁的“高昂代价”.位图索引会带来“位图段级锁”,实际使用过程一定要充分了解不同索引带来的锁代价情况. 1.为比较区别,创建两种索引类型的测试表1)在表t_bitmap上创建位图索引[email protected]> create table t_bitmap (id number(10), name varchar2(10),sex varchar2(1)); Table created. [email protected]>

Gprinter光栅位图点阵数据解析工具

最近参与的项目有一个需求,解析佳博热敏打印机的光栅位图点阵数据并保存为图片文件.数据是通过Bus Hound抓取的,如下图所示. 其中1b 40为初始化打印机的指令,对应的ASCII码为ESC @,1b 4a 18为打印并走纸的指令,对应的ASCII码为ESC J,1d 76 30为打印光栅位图的指令,对应的ASCII码为GS v 0,其后紧跟光栅位图模式(0x00).水平方向位图字节数(0x0036)和垂直方向位图点数(0x0018),后面则为本帧的位图数据(0x36*0x18=1296字节)

vc实现透明位图,透明背景

vc实现透明位图,透明背景 我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来. 一.实现方法 绘制"透明"位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为"透明色".通过将位图的背景色指定为"透明色",在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到

猎豹MFC--缩放位图StretchBit()

定义变量: 在初始化对话框中进行初始化: 给菜单添加事件处理: 在 因为打开第二张  图像的时候会失败,是因为没有释放对象,所以增加释放对象的功能: 定义保存旧位图的指针: 初始化该指针: 打开新位图选入DC时把旧位图保存起来: 窗口还要销毁 增加窗口销毁 消息: 也要释放对象: ////////////////////////////////////////////////////////////////////// 放大图像时就把百分比 加上10.然后释放: 释放后会自动转去执行ONpain

位图排序

在<编程珠玑>上看到的,开篇第一个问题,有很多数,小于一个MAXNUM,没有重复的,怎么排序最快. 答案是位图排序. 如果某一位不为0,那么这一位存代表一个数,位数(在序列中的位置)代表这个数. 比方说这些数都存在数组a,然后利用一个数组b,b初始状态各位都为0,然后读取a,如果a[1]=2,那么b[2]为1,a[3]=6,那么b[6]=1. 实现如下: 1 #include <iostream> 2 #include <fstream> 3 #include<s

位图操作和双缓冲机制

位图操作代码部分: CRect rect;  GetClientRect(rect);  pDC->SetMapMode(MM_ANISOTROPIC);  pDC->SetWindowExt(rect.Width(), rect.Height());  pDC->SetViewportExt(rect.Width(), -rect.Height());  pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2); CDC MemDC

位图缩放代码,如何伸拉图片,图片处理

最近在做一个项目需要将RGB图像进行拉伸处理,网上找了下相关资料,多数是建议用线性插值法,由于没有多余时间去研究,所以想找现成的代码用用,可惜试了N多,能用的代码无几,能达到效果的基本上没有.最后找了个支持位图进行缩放处理的,由于我只有RGB数据,这个需要先将RGB数据打包成位图文件,再调用.名字叫CxImage,这是一个图形处理库.源码里生成的基本都是静态库,需要全部编译再lib文件放到自己工程中.关于此类库的使用,这里有解释 我处理的是位图数据,关键代码如下 #include "ximage

(算法)位图BitMap

题目: 给定一数组,大小为M,数组中的数字范围为1-N,如果某带宽有限,无法传输该大小的数组,该怎么办? 思路: 通过位图BitMap来压缩数组,将数组中每个数字在bit位上标志,这样就可以将数组大小压缩很多倍,每个32位int只需要1bit来表示. 代码: #include<iostream> #include<string.h> using namespace std; char* compression(int *A,int imax,int n){ int m=(imax-