当前位置:C++技术网 > 资讯 > windows屏幕截取程序基础与位图详解

windows屏幕截取程序基础与位图详解

更新时间:2016-01-02 23:04:20浏览次数:1+次

windows支持各种格式预定义的剪贴板格式,这些格式在winuser.h中定义并有前缀为CF的标识符。
首先,在剪贴板中可以存储三种文本数据类型,相应的有一种相关的剪贴板格式
1,CF_TEXT 一种以NULL结尾的ANSI字符集字符串,字符串的每行结尾处含有一个回车换行符。这是最简单的剪贴板数据格式。要被传输到剪贴板的数据存储在内存块中,传输时使用指向次内存块的句柄,该内存块会成为剪贴板的属性,因此创建这个内存块的程序不应该继续使用它。
2,CF_OEMTEXT 包含文本数据(与CF_TEXT类似)但使用OEM字符集的内存块。Windows程序同常不用担心这点;在窗口中运行MS-DOS程序时如果使用剪贴板,则需要用到这种类型。
3,CF_UNICODETEXT 包含Unicode文本的内存块。类似于CF_TEXT,每行以回车换行符结束,字符NULL标志着整个数据的结束。
等等
与位图相关的剪贴板格式有三种。位图即对应传输设备像素的矩形位数组。
1,CF_BITMAP 设备相关位图。此位图由位图句柄传输到剪贴板中。程序把位图传给剪贴板后不应继续使用此位图。
2,CF_DIB 定义了设备无关位图的内存块。设备无关位图在数字图像处理里面涉及的比较多
3,CF_PALETTE 指向调色板的句柄。她通常和CF_DIB一起使用,用来定义在设备相关位图中使用的调色板
最后还有一些不同的剪贴板格式:
CF_PENDATA 和windows画笔扩展使用
CF_WAVE 声音文件
CF_RIFF 资源交换文件格式的多媒体数据
等等.....
对于具体的剪贴板的知识,请看《windows程序设计》本站提供下载。
对于剪贴板的具体操作,windows提供了如下函数:
OpenClipboard(hwnd);
EmptyClipboard();
SetClipboardData(iFormat,hGlobal);
CloseClipboard();
这四个函数实现向剪贴板传输数据。

位图是一个二维矩阵数组,对应于一个图像的像素。当现实生活中的图像被存放为位图时,图象被分成网格,像素则是基本采样单元。位图中每个像素的值代表网格的一个单元中的图像的平均颜色。单色的位图每个像素只需要一位;灰度或彩色位图的每个像素则需要多位。(在数字图像处理中有灰度图的概念,即灰度图的详细解释与应用。灰度图指的是只含亮度信息,不含色彩信息的图像灰度图的表示与色彩的表示一样从0到255共有256个级别,0最暗,255最亮)。
位图的空间尺寸经常又被称为它的分辨率。分辨率代表每度量单位里的像素数目。也就是说位图中的几个像素对应于一个特定的度量单位。
位图除了有空间尺寸,还有颜色维度,也就是每个像素所需的位的数目,位图的每个像素都有同样的颜色位数。每像素只有一位的位图称为二级或二色位图,或单色位图。每个像素不是0就是1。要想要更多颜色,就需要每个像素有更多的位。总共可能的颜色是2位数。有2位的话,你得到4种颜色,4位有16种颜色,8位有256种颜色,等依次类推,n位就是2^n种颜色。
BitBlt表示“位块传输”。可以把整个视频显示当成一个大位图,你在屏幕上看到的像素被表示成位,存放在视频显示适配板卡的内存中。