zoukankan      html  css  js  c++  java
  • 位图

    位图(Bitmap)
    是 Windows操作系统存储图像的方式。
    图像中的每个像素对应存储器中的一个或多个数据位,如单色位图(黑白)每个像素对应1位,16色位图每个像素对应4位(24),256色为8位(28),全彩色为24位等,所有的像素数据按照一行行的顺序排列在存储器中,每个像素对应的位数称为颜色深度。
    位图大小由 分辨率 * 颜色深度决定!

    位图的优势和不足

    位图的优越之处是操作的速度很快。
    因为计算机的屏幕显示是由硬件从视频缓冲区中的数据映射的,由于存放方式基本一致。
    向视频缓冲区中拷贝数据就可以直接将图像显示在屏幕上,所以以位图的方式存储像素,显示图形的时间几乎就是向视频缓冲区拷贝数据的时间。
    位图的不足之处基本可以归类为两点:
    一是尺寸问题:由于位图是不压缩的,它占用的空间很大,一个1 024×768像素、24位色的图像的大小为1 024×768×3,达2.3MB;

    二是位图的缩放问题。
    我们都知道矢量和位图之间的关系,矢量图形(例如现在网上最流行的Flash就是矢量格式的)可以无限制缩放而不变形,因为它是根据矢量实时计算出像素数据的。
    而位图缩放后要对原来的像素数据进行插值计算,不可避免地会有失真。

    在使用Windows的位图之前,必须搞清楚几个概念:位图、设备无关位图和位图文件。
    位图:
    单纯意义上的”位图”指的就是存放在内存中、可以马上使用的位图,它的颜色深度总是对应当前设备(如屏幕或打印机等)的颜色深度。
    如果不和具体的设备对应,位图数据是没有意义的,因为无法知道要把数据中的多少位解释成一个像素。具体可以进行扩展了解:bbs.fishc.com

    设备无关位图
    对于存放在磁盘上或别的地方的位图数据来说,它的颜色深度有可能和屏幕颜色深度不同。
    为了准确描述它的颜色信息,必须有像素数据的属性说明以及色彩表,在使用这个位图的时候,可以根据这些信息将像素数据转换到需要的颜色深度。
    色彩表和位图数据合在一起就叫做设备无关位图(DIB),因为它转换后可以用在不同颜色深度的设备上。

    Windows 有函数专门用来处理DIB。使用DIB惟一的问题是在当将高颜色数的DIB转换到低颜色数的设备上时,由于色彩只能被转换成设备所能表示的最相近的颜色,所以可能会有很大的颜色失真。

    文图文件
    DIB可以存放在磁盘上的位图文件中,位图文件一般以bmp为扩展名,它的内容包括一个bitmap文件头和DIB数据,bitmap文件头可以用来验证整个文件的有效性。所以简单地讲,DIB是位图数据的超集,位图文件又是DIB的超集。

    Windows 支持的图形文件格式事实上只有 bmp,ico 与 cur 等几种,可以广泛用在 GDI 操作中的只有 bmp 文件。
    其他格式文件如 jpg 与 tif 等都是不能直接应用的,要使用这些文件,必须在代码中将它们转换到位图格式以后才行,所以要编一个仅支持 bmp 的图片浏览器是很简单的,而要支持其他格式麻烦就大了,仅 jpg 格式的解码就是个很复杂的问题!

    Windows 对 bmp 文件的支持有两种方法:
    一种是打开 bmp 文件读入 DIB 部分的数据,然后用函数将 DIB 数据转换到位图数据
    另一种方法就是在资源文件中用和 ico,cur 文件类似的方法定义位图资源,然后在程序中装入后使用。
    我们现在给大家简单介绍下在资源文件中定义位图的方式,对位图资源的大部分操作涉及 GDI 的内容,大家可以自己先自习第7章的内容。

    在资源脚本文件中定义位图资源的语法是:
    位图ID  BITMAP [DISCARDABLE] 位图文件名
    在程序中可以用 LoadBitmap 函数装入位图资源
    invoke LoadBitmap,hInstance,lpBitmapName
    .if eax
    mov hBitmap,eax
    .endif
    LoadBitmap 函数返回一个位图句柄,在程序退出的时候,位图句柄必须用 DeleteObject 函数释放。

  • 相关阅读:
    kNN算法python实现和简单数字识别的方法
    python3.4学习笔记(二十) python strip()函数 去空格 函数的用法
    SolrCloud分布式集群部署步骤
    hbases索引技术:Lily HBase Indexer介绍
    HBase1.0以上版本的API改变
    Hbase1.0 客户端api
    java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries
    Resharp最新破解方法
    Cloudera Manager 5和CDH5离线安装
    Apache Thrift
  • 原文地址:https://www.cnblogs.com/poli/p/4857817.html
Copyright © 2011-2022 走看看