位图

实战——读取并分析BMP图像的十六进制数据

五迷三道 提交于 2020-03-10 20:25:02
文章目录 【内容概述】 【获取16进制数据】 【文件头】 【位图头】 【调色板】 【24位真彩图的位图数据】 【图像灰度化】 【灰度化后数据格式的变化】 【读32×32灰度图片的位图数据】 【位图数据的存储和像素位置的关系】 【总结】 【内容概述】 图像压缩 在ubuntu系统下读出BMP图像的十六进制数据 分析24位真彩BMP文件的文件头、图像头、调色板、位图数据 截取图像中心32×32区域,并灰度化 分析灰度化后带来的改变 位图数据存储方式与像素位置的关系 接下来我们就开始叭 ~ (* ^ ω ^ *) 【图像压缩】 这是一个 非必要 步骤,如果你的原图很小就不用啦。但是如果原图很大的话,建议压缩一下,不然数据量会hin大的。可以用格式工厂做 (有点大材小用嘞但是我首先就想到这个方法) .具体步骤可参考 这个说明 。我通过压缩把原本4032×3016的图像压缩成128×95的了。看看这个变化叭: 【压缩前】 【压缩后】 【获取16进制数据】 这一步我是在Ubuntu系统下进行的,我把原图命名为【ballon.bmp】 (因为是2019跨年时候在珠海长隆拍的小丑气球) 在图片所在文件夹打开终端,输入 $ xxd -i ballon.bmp ballon.h 并回车,具体操作可以参考 这个说明 。然后可以看到文件夹下新生成了一个.h文件,打开之后就可以看到十六进制的数组啦。

位图和分治

主宰稳场 提交于 2020-03-08 12:59:01
引子 给定 40 亿个不重复的没排过序的 unsigned int 型整数,然后再给定一个数,如何快速判断这个数是否在这 40 亿个整数当中? 位图 bitmap :就是用一个或多个 bit 来标记某个元素对应的值,而键就是该元素。采用位作为单位来存储数据,可以大大节省存储空间。 解决40亿个整数中的是否存在某个数字可以使用位图。 思路:建立长度为40亿的位数组,遍历这40亿个数字,假设数字为5,那么将位数组中数组下标为5的位改为1,如果数组中下标为5的位已经是1,那么不操作。假设当给定数字为7, 当位数组下标为0时说明不存在,当位数组下标为1时说明已经存在。 分治法 基于分治法也可解决这个问题。 思路:将40亿个数字根据哈希映射,映射到多个小文件中。再把给定的数字也进行哈希映射,映射到那个文件就在那个文件中查找这个数字是否存在。 如,对40亿个数字按一千万取模,这个会得到400个小文件:a0、a1、a2、a3、…a399,假设给定的数字为256,那么应该查找文件a256是否存在这个数字。 布隆过滤器 通过位图,可以实现布隆过滤器。 布隆过滤器是由二进制向量(或者说 位数组 )和一系列随机映射函数( 哈希函数 )两部分组成的数据结构。 布隆过滤器可以判断一个字符 一定不存在 或者 可能存在 。当判断一个字符可能存在,但实际上这个字符并不存在。 布隆过滤器可以解决 缓存穿透问题

关于MFC的游戏开发学习(二)游戏图片的显示及透明处理

一笑奈何 提交于 2020-03-01 11:04:44
前言:图片格式全是.bmp格式 遇到的问题: 在学习基于vs的mfc的框架中,在添加位图一步出了错。 明明图片是.bmp格式导入vs之后却不是。 后来发现是位图转换不成功,后来找了格式工厂软件用来转换位图就成功了。 知识点: .bmp文件主要由四个部分组成:位图文件头/位图信息头/调色板/位图数据 创建一个窗口之后,显示的屏幕划分为三个区域:屏幕区,窗口区,窗口内部区 透明位图的原理: 黑色RGB(0,0,0) 二进制为:00000000,00000000,00000000 白色(255,255,255) 二进制为:11111111,11111111,11111111 白色与任意色进行与操作=任意色 黑色与任意色进行与操作=黑色 黑色与任意色进行或操作=任意色 显示图片的流程: 1.获取窗口DC 2.创建位图并调用函数LoadImage装载图标,光标或位图 3.定义并创建一个内存设备环境DC,调用函数CreateCompatibleDC创建兼容的DC 4.调用函数SelectObject将位图选入兼容内存设备环境DC中 5.将兼容的DC中的位图填到当前的DC中,调用函数BitBlt显示图像。 6.恢复临时DC的位图,删除内存中的位图,删除兼容的DC,及释放内存资源。 1.添加需要的图片到资源里 右键点击bitmap 点击下属选项添加资源 选择位图,点击导入 再添加你的

位图结构

◇◆丶佛笑我妖孽 提交于 2020-03-01 08:42:42
文章目录 简介 实现原理 位运算的实现 实现 简介 位图结构实现是参考[邓俊辉]数据结构习题解析第三版 位图是一种特殊的序列结构,可以动态表示一组无符号整数构成的集合。其长度无限,且其中每个元素的取值都是布尔值(初始false) bool test(int k) 整数k是否存在 void set(int k) 整数k放入集合 void clear(int k) 删除整数k 本文用来记录和学习 实现原理 利用存储char的向量实现 整数k对应的序是 k >> 3 (char一个字节8比特位) 余数(k && 0x07) n 由当前元素的第n个元素置为1来表示 位运算的实现 余数部分设计到位运算下面解释下具体的过程 余数范围是[0,7],k & 0000 0111 可以等到 0x07 (2进制)00000111 7(10进制) (0x80 >> (k & 0x07)) 将余数位对应的比特位置为掩码 0x80 (二进制)10000000 (10进制) 128 M[k>> 3] |= (0x80 >> (k & 0x07)); 当前字节中余数对应的比特位一定是1 实现 class Bitmap { private: char *M; // 比特图所存放的空间 int N; // 容量为N*sizeof(char)*8 容量 protected: void init(int n) { //

如何设计软件程序的启动画面----visual c篇

自作多情 提交于 2020-02-29 05:35:01
说起软件程序启动画面,我们不得不想到Google浏览器,搜狗浏览器,以及输入法启动画面的绚丽动画,为之一振。  使用启动画面一是可以减少等待程序加载过程中的枯燥感(尤其是一些大型程序);二是可以用来显示软件名称和版权等提示信息。 其实这些都可使用visual c来实现,先安装visual c+ 6.0版本。 我想提供四种方法,前三种适用于基于文档的应用程序,第四种适用于基于对话框的应用程序。 利用组件库中的SplashScreen组件实现   (1)用Photoshop,CorelDRAW等制作启动画面图像,保存为bmp格式。   (2)用Appwizard建一个基于单文档的工程Splash。   (3)在资源中插入位图资源   打开VC 的资源编辑器,用鼠标右键单击Resources文件夹,选择Import命令,插入所制作的位图。如果位图超过256色,VC会弹出一个对话框,提示位图已经插入但不能在位图编辑器中显示,确定即可。将位图ID改为IDB_SPLASH。   (4)添加SplashScreen控件   ①选择菜单“project”/“AddToProject”/“ConponentsandControls”打开对话框,在列表框中双击“VisualC Conponents”选项,选择“SplashScreen”控件,然后单击“Insert”。  

Android平台实现位图(Bitmap)的序列化和反序列化

馋奶兔 提交于 2020-02-26 02:12:02
/*--> */ /*--> */   对象被序列化后可被保存或传输,这个例子实现了位图的序列化和反序列化。   这次就对 Android 工程自带的” icon.png” 进行下手。   程序运行后会在 /data/data/breakan.serializable/ 目录下生成一个 bitmap.bin 文件,这个文件保存的就是MyBitmap的对象。    1 package breakan.serializable; 2 3 import java.io.ByteArrayOutputStream; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.ObjectInputStream; 7 import java.io.ObjectOutputStream; 8 import java.io.Serializable; 9 10 import android.app.Activity; 11 import android.graphics.Bitmap; 12 import android.graphics.BitmapFactory; 13 import android.graphics.Bitmap.CompressFormat; 14 import

【WPF学习】第四十七章 WriteableBitmap类

倾然丶 夕夏残阳落幕 提交于 2020-02-22 21:33:49
  WPF允许使用Image元素显示位图。然而,按这种方法显示图片的方法完全是单向的。应用程序使用现成的位图,读取问题,并在窗口中显示位图。就其本身而言,Image元素没有提供创建和编辑位图信息的方法。   这正是WriteableBitmap类的用武之地。该类继承自BitmapSource,BitmapSource类是当设置Image.Source属性时使用的类(不管是在代码中直接设置图像,还是在XAML中隐式地设置图像)。但BitmapSource是只读的位图数据映射,而WriteableBitmap类是可修改的像素数组,为实现许多有趣得效果提供了可能。 一、生成位图   为使用WriteableBitmap类生成一幅位图,必须提供提供几部分重要信息:以像素为单位的宽度和高度、两个方向上的DPI分辨率以及图像格式。   下面是创建一幅与当前图像元素尺寸相同的位图的示例: // Create the bitmap, with the dimensions of the image placeholder. WriteableBitmap wb = new WriteableBitmap((int)img.Width, (int)img.Height, 96, 96, PixelFormats.Bgra32, null);   PixelFormats枚举提供了许多像素格式

bitmap文件格式分析

陌路散爱 提交于 2020-02-22 16:04:28
说到图片,位图( Bitmap )当然是最简单的,它 Windows 显示图片的基本格式,其文件扩展名为 *.BMP 。在 Windows 下,任何各式的图片文件(包括视频播放)都要转化为位图个时候才能显示出来,各种格式的图片文件也都是在位图格式的基础上采用不同的压缩算法生成的( Flash 中使用了适量图,是按相同颜色区域存储的)。 一、下面我们来看看位图文件( *.BMP )的格式。 位图文件主要分为如下 3 个部分: 块名称 对应 Windows 结构体定义 大小( Byte ) 文件信息头 BITMAPFILEHEADER 14 位图信息头 BITMAPINFOHEADER 40 RGB 颜色阵列 BYTE* 由图像长宽尺寸决定 1、 文件信息头 BITMAPFILEHEADER 结构体定义如下: typedef struct tagBITMAPFILEHEADER { /* bmfh */ UINT bfType; DWORD bfSize; UINT bfReserved1; UINT bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER; 其中: bfType 说明文件的类型,该值必需是0x4D42,也就是字符'BM'。 bfSize 说明该位图文件的大小,用字节为单位 bfReserved1 保留,必须设置为0

VC重绘如何防止控件闪烁

▼魔方 西西 提交于 2020-02-21 03:56:28
用MFC如何高效地绘图 TouchMe 显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。 而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。 MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单, 只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。 我想就我长期(呵呵当然也只有2年多)使用MFC绘图的经验谈谈 我的一些观点。 1、显示的图形为什么会闪烁? 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏 幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时, 总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容 反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来 在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了。 当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来 绘制的图形进行清除,而又叠加上了新的图形。 有的人会说,闪烁是因为绘图的速度太慢或者显示的图形太复杂造成的, 其实这样说并不对,绘图的显示速度对闪烁的影响不是根本性的。 例如在OnDraw(CDC *pDC)中这样写: pDC->MoveTo(0,0); pDC->LineTo(100,100); 这个绘图过程应该是非常简单、非常快了吧

WinCE平台下BMP转JPG代码备份2

风格不统一 提交于 2020-02-17 14:31:16
1 /********************************************************************************************************* 2 ** Function name: epcCamGetRgbFrame 3 ** Descriptions: 本函数用于获取RGB通道的图像的数据缓存区地址 4 ** input parameters: prAddInfo 存放获取的地址,注意访问该地址的图像数据时候使用SetKMode(TRUE) 5 ** output parameters: 无 6 ** Returned value: TRUE:成功;FALSE:失败 7 *********************************************************************************************************/ 8 9 10 11 12 13 EpcsCam::EpcsCam(void)14 {15 hDLL=LoadLibrary(CString("\\FlashDisk2\\epcCameraLib.dll"));//加载动态链接库MyDll.dll文件;16 17 18 19 }20 21 EpcsCam::~EpcsCam