-
位图
2017-05-21 18:19:50在游戏中,角色位图的位置是不断变化的,所以设备上下文中合成位图的内容也是不断变化的。为了实现游戏画面的刷新,通常是利用缓存设备环境来保存下一帧的合成位图对象,下一帧的合成位图对象是根据角色位图的实时...在游戏中,角色位图的位置是不断变化的,所以设备上下文中合成位图的内容也是不断变化的。为了实现游戏画面的刷新,通常是利用缓存设备环境来保存下一帧的合成位图对象,下一帧的合成位图对象是根据角色位图的实时位置和状态重新渲染后的结果。
位图绘制
1.加载位图,从文件中加载位图对象 2.建立兼容DC,建立一个与窗口设备环境DC兼容的内存设备环境DC 3.选用位图对象,内存DC使用步骤1中所建立的位图对象 4.进行贴图,将内存DC中的内容贴到窗口DC中加载
一般从文件中加载,使用的是LoadImage()。不仅可以加载位图,还可以加载图标、光标等图像资源。
HANDLE LoadImage(
HINSTANCE hinst, //来源实例句柄
LPCTSTR lpszName, //名称
UINT uType, //加载的类型
int cxDesired, //指定存储的宽度
int cyDesired, //指定存储的高度
UINT fuLoad //加载的方式
);
第一个参数:HINSTANCE类型 的hinst,包含被加载图像模型的实例句柄,若从硬盘文件或者资源文件中进行加载,这个参数设置为NULL
第二个参数:LPCTSTR类型的lpszName,被加载的资源所在的路径与文件名或者资源名
第三个参数:UINT 类型的uType,指定被加载的图像类型,可取值为以下三种之一:
IMAGE_BITMAP:加载的图像是位图文件,扩展名为.bmp;
IMAGE_CUSOR:加载的图像是光标文件,扩展名为.cur;
IMAGE_ICON:加载的图像是图标文件,扩展名为.ico;
第四个参数:int类型的cxDesired,指定光标或者图标加载后在内存中存储的宽度,单位是像素。
第五个参数:int类型的cyDesired,指定光标或者图标加载后在内存中的存储的高度,单位为像素
第六个参数:UINT类型的fuLoad,指定位图加载方式,若是从文件中加载图像,需要设置为LR_LOADFROMFILE
如HBITMAP g_hBitmap=(HBITMAP)LoadImage(NULL,L”Dota2.bmp”,IMAGE_BITMAP,800,600,LR_LOADFROMFILE);//加载位图,表示加载一副名为Dota2图片的bmp文件到位图句柄g_hBitmap中,且加载后在内存中这幅图存储宽带为800,高度为600兼容
为了绘制出位图,我们需要创建一个和设备环境兼容 的内存设备环境,这样才会有暂时存放位图对象的地方。
把位图对象用SelectObject函数选入到内存设备环境中,然后再用贴图函数,把内存设备环境中的内容贴到设备环境中。内存DC在这里起到中转站的作用,用于暂时存储加载好的位图,由于我们最终会把暂存在内存DC上这幅位图贴到真正DC上,所以这个DC要做到与窗口DC的无缝衔接。我们一般使用CreateCompatible()函数来建立内存DC。
CreateCompatibleDC函数的作用就是创建一个与指定DC相兼容的内存DC,
HDC CreateCompatibleDC(__in HDC hdc);//创建有窗口DC兼容的内存DC
HDC类型的hdc,需要填写与内存DC兼容的目的DC的句柄,如果这个句柄为NULL,那么CreateCompatibleDC函数将创建一个与应用程序的当前显示器兼容的内存设备上下文环境跟窗口一样,内存DC使用后也必须进行释放的操作。
BOOL DeleteDC(__in HDC hdc);选用位图对象
SelectObject()
贴图
将内存DC中的内容复制到设备环境DC中,就实现了贴图的效果。这个操作使用的函数有很多,如BitBlt() TransparentBlt() 或者StretchBlt();
BitBlt函数的功能就是从源矩形中复制一个位图到目标矩形中,必要时候按照目前目标设备设置的模式进行图像的拉伸或压缩。
BOOL BitBlt(
__in HDC hdcDest //目标设备环境句柄
__in int nXDest //目的DC的X坐标
__in int nYDest //目的DC的Y坐标
__in int nWidth //贴到目的DC的宽度
__in int nHeight //贴到目的DC的高度
__in HDC hdcSrc //源设备环境句柄
__in int nXSrc //来源DC的x坐标
__in int nYSrc //来源DC的y坐标
__in DWORD dwRop //贴图方式
)
第九个参数:DWORD类型的dwRop,指定光栅操作代码,即贴图的方式。这些代码定义着源矩形区域的颜色数据,将如何与目标矩形区域的颜色数据组合以完成最后的颜色。
图像文件是以一个四四方方的矩形来存储的。 -
位图
2010-08-18 19:33:00位图图像放大位图图像(bitmap), 亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。...位图图像放大位图图像(bitmap), 亦称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的。这些点可以进行不同的排列和染色以构成图样。当放大位图时,可以看见赖以构成整个图像的无数单个方块。扩大位图尺寸的效果是增大单个像素,从而使线条和形状显得参差不齐。然而,如果从稍远的位置观看它,位图图像的颜色和形状又显得是连续的。
位图重点
处理位图时要着重考虑分辨率
处理位图时,输出图像的质量决定于处理过程开始时设置的分辨率高低。分辨率是一个笼统的术语,它指一个图像文件中包含的细节和信息的大小,以及输入、输出、或显示设备能够产生的细节程度。操作位图时,分辨率既会影响最后输出的质量也会影响文件的大小。处理位图需要三思而后行,因为给图像选择的分辨率通常在整个过程中都伴随着文件。无论是在一个300 dpi的打印机还是在一个2570dpi的照排设备上印刷位图文件,文件总是以创建图像时所设的分辨率大小印刷,除非打印机的分辨率低于图像的分辨率。如果希望最终输出看起来和屏幕上显示的一样,那么在开始工作前,就需要了解图像的分辨率和不同设备分辨率之间的关系。显然矢量图就不必考虑这么多。
位图颜色编码
RGB
位图颜色的一种编码方法,用红、绿、蓝三原色的光学强度来表示一种颜色。这是最常见的位图编码方法,可以直接用于屏幕显示。
CMYK
位图颜色的一种编码方法,用青、品红、黄、黑四种颜料含量来表示一种颜色。常用的位图编码方法之一,可以直接用于彩色印刷。
位图图像属性
索引颜色/颜色表
位图常用的一种压缩方法。从位图图片中选择最有代表性的若干种颜色(通常不超过256种)编制成颜色表,然后将图片中原有颜色用颜色表的索引来表示。这样原图片可以被大幅度有损压缩。适合于压缩网页图形等颜色数较少的图形,不适合压缩照片等色彩丰富的图形。
Alpha通道
在原有的图片编码方法基础上,增加像素的透明度信息。图形处理中,通常把RGB三种颜色信息称为红通道、绿通道和蓝通道,相应的把透明度称为Alpha通道。多数使用颜色表的位图格式都支持Alpha通道。
色彩深度
色彩深度又叫色彩位数,即位图中要用多少个二进制位来表示每个点的颜色,是分辨率的一个重要指标。常用有1位(单色),2位(4色,CGA),4位(16色,VGA),8位(256色),16位(增强色),24位和32位(真彩色)等。色深16位以上的位图还可以根据其中分别表示RGB三原色或CMYK四原色(有的还包括Alpha通道)的位数进一步分类,如16位位图图片还可分为R5G6B5,R5G5B5X1(有1位不携带信息),R5G5B5A1,R4G4B4A4等等。
-
易语言位图句柄取位图模块源码
2020-07-18 03:09:57易语言位图句柄取位图模块源码,位图句柄取位图模块,NotifySys,运行时错误,取执行的文件名,位图句柄取数据,数据取位图句柄,解锁内存块,释放内存块,取内存块长度,锁定内存块,删除对象,取屏幕句柄 -
位图工具,用于8583的位图直观显示。
2018-05-30 23:06:49位图工具,用于8583的位图直观显示。 位图工具,用于8583的位图直观显示。 位图工具,用于8583的位图直观显示。 -
Redis位图
2020-05-24 17:52:58上课签到时间到了,张三老师开始点名了,每点一名同学就新增加一条记录,我们数据库会把这条记录写...Redis也有这样的结构名叫位图,位图最小的单位是bit,每个bit是由0或1构成,我们的字符串就是由很多个bit数组组成的上课签到时间到了,张三老师开始点名了,每点一名同学就新增加一条记录,我们数据库会把这条记录写到学生考勤表里,到学期末考核的时候汇总根据学生迟到次数计算总学分。假设一个班级50个学生,一天4课时,一个星期就要记录1000条记录,那么如果说我们根据学生的学号顺序记录学生签到信息,通过“0”和“1”来表示,“1”就代表学生签到,“0”代表学生迟到,那么我们一个星期只要保存20条数据即可。
Redis也有这样的结构名叫位图,位图最小的单位是bit,每个bit是由0或1构成,我们的字符串就是由很多个bit数组组成的,所以我们在使用位图的时候是可以把一组bit转换成字符串,也可以由字符串转换成bit数组。
位图基本用法
如下,“h”的ACSLL码是0110 1000
> setbit name 1 1 #设置位图的位置
(integer) 0
> setbit name 2 1
(integer) 0
> setbit name 4 1
(integer) 0
> get name #获取这个位图转换成字符串的值
"h"
> getbit name 1 #获取位图的某个位置是否有值
(integer) 1
> getbit name 3
(integer) 0
字符串转位图
> set kh h #存字符串
OK
> getbit kh 1 #第二个位置的bit是1
(integer) 1
> getbit kh 3 #第四个位置的bit是0
(integer) 0
注意:如果对应位的字节是不可打印字符,redis会显示该字符的十六进制形式。
> setbit x O 1
(integer) 0
> setbit x 1 1
(integer) 0
> get x
"\xc0"
统计和查找
Redis位图提供bitcount和bitpos指令,bitcount用来统计一定范围内1的个数,bitpos用来查找指定范围内出现的第一个0或者1。
这里我们需要注意的是参数start_index和end_index是字节索引,简单的来说就是他们只能是8的倍数而不是指定值。
咱们对照下图来看
> set name hello
OK
127.0.0.1:6379> bitcount name #计数所有的1的个数
(integer) 21
127.0.0.1:6379> bitcount name 0 1 #获取前两个字符出现1的个数
(integer) 7
127.0.0.1:6379> bitcount name 0 0 #获取第一个字符出现1的个数
(integer) 3
127.0.0.1:6379> bitpos name 1 #获取第一个1出现的位置
(integer) 1
127.0.0.1:6379> bitpos name 0 #获取第一个0出现的位置
(integer) 0
127.0.0.1:6379> bitpos name 1 1 1 #获取第二个字符1出现的位置
(integer) 9
关于位图批量操作
我们通过setbit和getbit指令来操作位图都是一次操作一个位,那么有时候我们需要一次性操作多个位,如何操作呢?
在Redis3.2版本之前我们可以使用管道来一次性操作多个指令,redis给我们提供了bitfield指令,该指令有三个子指令分别是get、set、incrby它们都可以对指定位片段进行读写,但是最多只能处理64个连续的位,如果超过64位,就得使用多个子指令,bitfield 可以一次执行多个子指令。
Get
下面我们来看例子,还是使用上面的name=hello
字母 数值 二进制 h 104 0110 1000 e 101 0110 0101 l 108 0110 1100 l 108 0110 1100 o 111 0110 1111 > bitfield name get u4 0 #第一个位开始取4个位(0110),结果为无符号数(u)
(integer) 6
> bitfield name get u3 2 #第三个位开始取3个位(101),结果为无符号数(u)
(integer) 5
> bitfield name get i4 0 #第一个位开始取4个位(0110),结果为有符号数(i)
(integer) 6
> bitfield name get i3 2 #第三个位开始取3个位(101),结果为有符号数(i)
(integer) -3
下面我们才试试批处理
> bitfield name get u4 0 get u3 2 get i4 0 get i3 2
(integer) 6
(integer) 5
(integer) 6
(integer) -3
有符号数是指获取的位数组中第一个位是符号位,剩下的才是值。如果第一位是1,那就是负数。无符号数表示非负数,没有符号位,获取的位数组全部都是值。有符号数最多可以获取 64 位,无符号数只能获取 63 位(因为 Redis 协议中的integer是有符号数,最大 64 位,不能传递 64 位无符号值)。
Set
下面我们来使用set,把hello的e变成a,a的ASCLL码是97
>bitfield name set u8 8 97 #从第八位开始,接下来的8位用无符号的ASCLL码97代替
(integer)101
>get name
"hallo"
Incrby
这个指令用来自增,如果自增到最大值的时候会溢出,如果是无符号那么就变成0,如果是有符号的就会变成负数,向下自增反之。
bitfield指令提供溢出策略的指令overflow,用户可以指定类型,默认为:wrap,溢出及折返,还可以选择失败:fail,失败不执行,截断:sat,溢出就停留。
> bitfield name incrby u4 2 1 #从第三个位开始,对接下来的4位元符号数+ 1
(integer) 11
> bitfield name incrby u4 2 1
(integer) 12
> bitfield name incrby u4 2 1
(integer) 13
> bitfield name incrby u4 2 1
(integer) 14
> bitfield name incrby u4 2 1
(integer) 15
####sat
> bitfield name overflow sat incrby u4 2 1 #保持最大值
(integer) 15
####fail
> bitfield name overflow fail incrby u4 2 1 #不执行
(nil)
####wrap
> bitfield name incrby u4 2 1 #溢出折返
(integer) 0
一名正在抢救的coder
笔名:mangolove
CSDN地址:https://blog.csdn.net/mango_love
GitHub地址:https://github.com/mangoloveYu
-
位图概述
2019-11-03 15:15:04位图的概念 位图是数字图像的一种存储格式,使得计算机 可以用0和1的形式保存复杂的图像。 位图是GDI的对象 有设相关和设备无关之分 设备无关位图 BMP位图处理流程 ...展开全文 -
BMP位图
2018-10-25 14:22:30BMP位图由4个部分组成:位图文件头,位图信息头,调色板,像素数据。 1.位图文件头 VC++中用BITMAPFILEHEADER数据结构定义位图头文件,它包含文件类型、文件大小、存放位置等信息,结构如下: typedef struct ... -
组态软件位图
2018-09-14 14:53:05组态王/力控等组态软件位图,按钮,图标,箭头,等等da -
单色位图、16色位图、256色位图的含义
2019-07-04 11:15:00在WIndows下的画图工具中绘制完图片后,另存为的时候有以下几种选项: 这些分别代表什么含义呢? 单色位图: 每个像素最多可以表示2种颜色,...256色位图: 每个像素最多可以表示256中颜色,所以只需要长度是8... -
触摸屏按钮位图
2018-06-04 10:09:07触摸屏位图,需要的看看交流。我也需要位图 触摸屏位图,需要的看看交流。我也需要位图 -
位图概念
2017-08-24 10:00:01位图(*.bmp *.dib) 以像素点聚集去呈现一张图,放大或缩小都会改变画质。 通过每个像素点所占空间来区分图片类型。以位(bits)为单位。 单色 一个像素点占用1bits空间。因此每个像素点只能表示0和1,也就是黑色... -
egret位图文理-创建位图
2018-08-06 15:04:49位图的使用离不开纹理的支持,在Egret中,我们默认隐藏了纹理的操作,所有操作均针对于显示对象进行。但位图的显示依然基于纹理。在显示一张图片是,我们需要使用Bitmap类。这是egret中的图片类,而纹理则来自于我们... -
MCGS位图.rar
2020-03-06 14:52:10昆仑通泰触摸屏MCGS、MCGS Pro 位图可以直接使用。按钮,指示灯,水泵,阀门,管道等都有 -
Oracle位图
2016-09-07 20:22:03位图(BitMap)索引 前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,...说来惭愧,在这之前对位图索引一无所知,因此趁此机会写篇博文介绍下位图索引。 1. 案例 有张表名为table的表,由三列组成, -
昆仑组态位图.zip
2020-07-31 14:09:37昆仑通态触摸屏位图图片,包括按钮,背景,眉头一些风格的按键。大约有十几种不同类型的位图。仅供大家参考 -
8位图转24位图的两种方法
2020-02-23 14:54:248位图转24位图的两种方法 /// <summary> /// 8位图转24位图 /// </summary> /// <param name="bmp">bmp</param> /// <returns>bmp24</returns> pu... -
位图排序
2013-04-05 12:55:34主要是阐述位图在排序中的使用. 问题描述 位图排序是一种效率极高(复杂度可达O(n))并且很节省空间的一种排序方法,但是这种排序方法对输入的数据是有比较严格的要求(数据不能重复,大致知道数据的范围)。位图排序即...
-
MySQL NDB Cluster 负载均衡和高可用集群
-
MySQL 管理利器 mysql-utilities
-
用户态和内核态的内存分配
-
飞秒激光湿法刻蚀可扩展形状控制的弯曲微结构加工
-
自组装石墨烯纳米纤维修饰的电化学微电极
-
【转载】yolo处理流程实例
-
幻想集18小怪兽和小王子
-
Kafka参数设置与调优
-
MySQL 数据库权限管理(用户高级管理和精确访问控制)
-
C语言零基础入门(详细讲解)
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
Docker安装
-
机器学习优化算法-源码
-
施华洛世奇悄悄换了新logo 品牌域名始终如一
-
小白IP代理工具
-
最新最全论文合集——个性化对话系统
-
地点-源码
-
H2O分子吸附在SiO2上AB堆积双层石墨烯的可调带隙
-
flow-db-admin:与流路由器一起使用的Meteor数据库管理软件包-源码
-
Android系统基础介绍