win32 7.1 色彩和坐标

  1. Windows的色彩:
    1. 一种颜色可以分成 红绿蓝 三原色,所以可以用红、绿、蓝3个分量的组合来表示颜色。
    2. 索引色:
      当设备支持的颜色深度少于等于8位时,总体位数太少,不足以用来表达3个颜色分量,这时系统建立一个色彩表,像素数据用来做索引在颜色表中获取颜色值,所以低于8位的颜色成为索引色。
    3. win32中颜色的使用:
      在win32编程中,统一使用32位的整数来表示一个深度为24位的颜色,在这32位中只使用低24位,每一种原色分量占8位,其中0~7位为红色,8~15位为绿色,16~23位为蓝色。
      如下,程序中用到一种颜色常数的时候:win32 7.1 色彩和坐标
    4. 使用颜色函数:
      1. GetNearestColor函数:
        当现实设备无法表示24位色的时候,Windows会自动用设备可以显示的最接近颜色来代替它,当现实设备的颜色深度比较低的时候,可以通过函数 GetNearestColor来得到一种颜色(dwColor)会被系统替换成哪种颜色。
        win32 7.1 色彩和坐标
      2. GetDeviceCaps 和 dwColorDepth 函数
        当现实设备颜色深度太低的时候,经过Windows自动转换的图像可能让人觉得很不自然,所以有些时候,程序员可能希望预先得知设备的颜色深度,根据不同具体情况显示不同图形。
        显示设备的颜色深度可以通过一下函数获得:
        win32 7.1 色彩和坐标 第一个函数调用返回DC的色彩平面数,第二个函数调用返回每个像素的色彩位数,颜色深度最后可以通过dwPlanes与dwBitsPixel得到。
  2. Windows的坐标系
    1. Windows默认坐标:
      1. 要用GDI函数绘图,就必须首先了解这些函数使用的坐标系,在默认的状态下,Windows坐标系以左上角作为坐标原点,以右方当做X坐标的正方向,以下方当做Y坐标的正方向。坐标的数值用一个有符号位的16位数来表示,范围从 -32768~32767,坐标单位是像素。
        win32 7.1 色彩和坐标
      2. 优点:
        这种定义的好处是每个窗口每一点不会因为窗口的大小改变而改变。试想一下,这种方法以左下角为坐标原点,那么当窗口高度被用户调整的时候,客户区中每一点的Y坐标都会变下,在具体使用中会有诸多不便。
    2. 使用 SetMapMode 函数映射:
      1. 但是 Windows 也提供了其他的一些坐标映射方法供程序员使用,可以用 SetMapMode 函数来为一个 DC 设置新的坐标映射方法:
        win32 7.1 色彩和坐标
      2. iMapMode 取值 解读:
        win32 7.1 色彩和坐标
        1. Windows采用的默认映射方法是 MM_TEXT。
        2. 可以看到,除了默认的MM_TEXT外,下面五种方法都是原点位于左上角,X正方向向右的映射方式,另外,它们的逻辑单位是不同的。
        3. 最后的两种映射方式提供了更灵活的选择,设置为这两种映射方式后,程序可继续调用 SetViewPortOrgEx,setViewportRxtEx,setWindowExtEx 函数来*设置坐标系的原点、逻辑单位和坐标正方向的所有参数。在其映射方式下的时候,不能使用这3个设置函数,这时候任何对它们的调用都会被忽略。