AE开发之鹰眼窗口、书签、颜色模型

本文详细介绍了GIS地图控件的鹰眼窗口实现,包括鼠标操作、地图范围更新及图形要素的绘制。同时,讲解了书签管理,包括添加、删除和定位书签的功能。此外,还涉及到颜色模型的理解,如RGB颜色和透明度的设置。最后,提到了几何对象,如点、线、面及其在地图上的表示。
摘要由CSDN通过智能技术生成

鹰眼窗口

1.首先在设计窗口加入一个MapControl,这是我们的鹰眼窗口。

2.判断鼠标左键or右键是否按下,在OnMouseDown相应函数中去操作,可以用e.button去判断。
①若按下左键,则创建一个点对象,将鼠标所在的x,y赋给点对象,将地图主窗口的中心点定位到新的位置,再将地图主窗口刷新。

②若按下右键,则调用axmapcontrol2的矩形框跟着功能拉框操作。并把拉框完成后的范围给一个“信封”。将新的拉框范围赋值给地图主窗口的范围。再将主窗口地图刷新

3.(绑定MapControl的OnMapReplaced事件)

在OnMapReplaced函数中去建立两个Map窗口的联系。

①利用循环,判断主地图窗口的地图层数,循环次数=层数。
②在利用索引窗口的addLayer方法依次将主窗口中的图层添加到索引窗口中。
③将索引窗口的地图设为整图显示。
④刷新索引窗口。

4.axMapControl1_OnExtentUpdated函数中进行如下操作:

①将参数e转换为IEnvelope接口,相当于把新的空间范围进行存放在了pEnvelop。
②获得索引窗口的图像要素容器,在索引地图上的一个透明层,可以绘制点、线、面、文本等多图像要素
③删除图形要素容器中原来的所有要素。
④创建一个矩形要素,使该矩形要素的几何实体等于pEnvelope接口对象。相当于该矩形要素的空间范围等于新传进来的空间范围。
⑤创建一个RGB颜色对象。
其中Transparency是对象的透明度,0为纯透明,255为不透明。
创建一个简单的线符号,给该符号附上颜色,如红色。设置线的宽度,如:3个像素。使颜色对象全透明。
⑦创建一个简单的填充符号,填充为纯透明,给填充符边界附上一个红色的边框。
⑧通过接口查询,获取填充要素的接口。
⑨给填充要素的符号赋值为刚才创建的具有红色边框的填充符号。
⑩将新获得的具有红色边框的填充要素添加进索引窗口的图形要素容器中,让索引窗口的图形绘制内容刷新。

4.axMapControl2_OnMouseMove事件:
判断鼠标左键是否按下,若按下,创建一个点对象,给点对象的x赋值为鼠标所在位置规定X坐标,Y同理。

将地图主窗口的中心点定位到新的位置,主地图刷新。

 private void axMapControl2_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
        {
            if (e.button == 1)//判定鼠标左键是否按下
            {
                IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();//创建一个点对象
                pPoint.PutCoords(e.mapX, e.mapY);//给点对象的xy赋值为鼠标所在位置的xy坐标
                axMapControl1.CenterAt(pPoint);//将地图主窗口的中心点定位到新的位置
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);//主窗口地图刷新
            }
            else if (e.button == 2)//判定鼠标右键是否按下
            {
                IEnvelope pEnvelop = axMapControl2.TrackRectangle();//调用axmapcontrol2的矩形框跟踪功能进行拉框操作
                //将拉框完成后的范围赋值给一个envelope
                axMapControl1.Extent = pEnvelop;//将新的拉框范围赋值给地图主窗口的空间范围
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);//主窗口地图刷新
            }
        }

        private void axMapControl1_OnMapReplaced(object sender,ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)
        {
            for (int i = 0; i < axMapControl1.ActiveView.FocusMap.LayerCount; i++)//依据axmapcontrol1(主地图窗口)中正处于打开
                                                                                  //状态的地图的图层数进行循环
                axMapControl2.AddLayer(axMapControl1.ActiveView.FocusMap.get_Layer(i));//利用索引窗口控件的addlayer方法依次把主窗口                                                                        //中的图层添加所引窗口中
           
            axMapControl2.Extent = axMapControl1.FullExtent;//将索引窗口的地图设为整图显示
            axMapControl2.Refresh();//刷新索引窗口
            
        }

        private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)
        {
           
            IEnvelope pEnvelop = e.newEnvelope as IEnvelope;//将参数e转换成Ienvelop接口对象,相当于把新的空间范围存放
                                                             //pEnvelop接口对象中了
            IGraphicsContainer pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;//获得索引窗口的图形要素容器;
            //该容器可以简单的理解为在索引地图的上面蒙上一层透明的层
            //该层中可以绘制点、线、面、文本等多种图形要素

            pGraphicsContainer.DeleteAllElements();//删除图形要素容器中原来的所有要素
            IElement pElemet = new RectangleElement();//创建一个矩形要素
            pElemet.Geometry = pEnvelop;//使该矩形要素的几何实体等于pEnvelope接口对象,
                                        //相当于该矩形要素的空间范围等于新传进来的空间范围

            IRgbColor pColor = new RgbColor();//创建一个RGB颜色对象
            pColor.Red = 255;//红色值
            pColor.Green = 0;//绿色值
            pColor.Blue = 0;//蓝色值
            pColor.Transparency = 255;//该颜色对象的透明度0~255,0为纯透明,255为不透明

            ILineSymbol pLine = new SimpleLineSymbol();//创建一个简单的线符号
            pLine.Color = pColor;//给该线符号附上颜色,目前为红色
            pLine.Width = 3;//线的宽度为3个像素

            pColor.Transparency = 0;//使颜色对象全透明

            IFillSymbol pFillSymbol = new SimpleFillSymbol();//创建一个简单的填充符号
            pFillSymbol.Color = pColor;//让该填充符号纯透明
            pFillSymbol.Outline = pLine;//给该填充符号的边界附上一个红色的边框

            IFillShapeElement pFillShapeEle = pElemet as IFillShapeElement;//通过接口查询,获取填充要素的接口
            pFillShapeEle.Symbol = pFillSymbol;//给填充要素的符号赋值为刚才创建的具有红色边框的填充符号

            pGraphicsContainer.AddElement((IElement)pFillShapeEle, 0);//将新获得的具有红色边框的填充要素添加进索引窗口的图形要素容器中
            axMapControl2.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);//让索引窗口的图形绘制内容刷新
        }

        private void axMapControl2_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
        {
            if (e.button == 1)//判定鼠标左键是否按下
            {
                IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();//创建一个点对象
                pPoint.X = e.mapX;//给点对象的x赋值为鼠标所在位置规定x坐标
                pPoint.Y = e.mapY;//给点对象的y赋值为鼠标所在位置规定x坐标
                axMapControl1.CenterAt(pPoint);//将地图主窗口的中心点定位到新的位置
                axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);//主窗口地图刷新
            }
        }

标签 感兴趣区再回来

1.添加窗体应用,using需要的库文件,把textBox1中的text赋值给BookMarkName。
2.点击OK,进行书签的保持。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MapControl2
{
    public partial class frmAddBookMark : Form
    {
        string _BookMarkName;



        public frmAddBookMark()
        {
            InitializeComponent();
        }

        public string BookMarkName { get => _BookMarkName; set => _BookMarkName = value; }

        private void button1_Click(object sender, EventArgs e)
        {
            this.BookMarkName = textBox1.Text;
            //给标签名称的属性赋值为文本框中的内容
            this.DialogResult = DialogResult.OK;
        }

        private void frmAddBookMark_Load(object sender, EventArgs e)
        {

        }
    }
}

添加书签的菜单制作。

 private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            /*
             以下代码可以“替换”以下函数体
             
            ICommand pCreatBookmark = new ControlsMapCreateBookmarkCommand();
            pCreatBookmark.OnCreate(axMapControl1.Object);
            pCreatBookmark.OnClick();

             */
            

            frmAddBookMark frm = new frmAddBookMark();
            frm.ShowDialog();
            if(frm.BookMarkName!="")
            {
                IMap pMap = axMapControl1.Map;
                IMapBookmarks pMapMarks = axMapControl1.Map as IMapBookmarks;
                IEnvelope penv = axMapControl1.Extent;
                IAOIBookmark pNewMark = new AOIBookmark();

                pNewMark.Name = frm.BookMarkName;
                pNewMark.Location = penv;
                pMapMarks.AddBookmark(pNewMark as ISpatialBookmark);
            }

        }

注意:其中frmBookmarkEdit是控件名

ListBooks窗口

1.添加属性

 private IMap _pMap;

        public IMap PMap { get => _pMap; set => _pMap = value; }

        public frmBookmarkEdit(IMap pMap)
        {
            this._pMap = pMap;
            InitializeComponent();
        }

2.设置load函数

 private void frmBookmarkEdit_Load(object sender, EventArgs e)
        {
            IMapBookmarks pMapbookmarks = PMap as IMapBookmarks;//接口转换为地图书签集合接口
            IEnumSpatialBookmark pEnumBookMarks = pMapbookmarks.Bookmarks;//获取地图中书签集合
            pEnumBookMarks.Reset();//指向头部
            ISpatialBookmark pBookmark = pEnumBookMarks.Next();//获取地图书签集合中的第一个书签
            this.listBox1.Items.Clear();//清除listBox控件中原有的所有ITem
            while(pBookmark!=null)//地图书签非空
            {
                listBox1.Items.Add(pBookmark.Name);//将地图书签名称添加到listBox控件的列表集合
                pBookmark = pEnumBookMarks.Next();//获取下一个书签对象
            }
        }

3.设置定位函数

 private void button1_Click(object sender, EventArgs e)
        {
            if(this.listBox1.SelectedItem!=null)//若list列表中的已选择项非空
            {
                string strBookmarkName = listBox1.SelectedItem.ToString();//获得选择项的名称
                IMapBookmarks pBookmarks = PMap as IMapBookmarks;//接口转换为地图书签集合接口
                IEnumSpatialBookmark pEnumBookmark = pBookmarks.Bookmarks;//获得地图书签集合
                pEnumBookmark.Reset();//指针指向头部
                ISpatialBookmark pBookmark = pEnumBookmark.Next();
                while(pBookmark!=null)
                {
                    if (pBookmark.Name == strBookmarkName)
                    {
                        pBookmark.ZoomTo(PMap);//将地图缩放到该书签指定空间范围你
                        IActiveView pactiveView = PMap as IActiveView;//获得地图的活动视图窗口接口
                        pactiveView.Refresh();//地图刷新
                        return;
                    }
                    pBookmark = pEnumBookmark.Next();//获得下一条地图书签
                }
            }
        }

4.设置删除函数

private void button2_Click(object sender, EventArgs e)
        {
            if(this.listBox1.SelectedItem!=null)
            {
                string strBookmarkName = listBox1.SelectedItem.ToString();
                IMapBookmarks pBookmarks = PMap as IMapBookmarks;
                IEnumSpatialBookmark pEnumBookmark = pBookmarks.Bookmarks;
                pEnumBookmark.Reset();//指针指向头部
                ISpatialBookmark pBookmark = pEnumBookmark.Next();
                while(pBookmark != null)
                {
                    if (pBookmark.Name == strBookmarkName)
                    {
                        pBookmarks.RemoveBookmark(pBookmark);
                        listBox1.Items.Remove(listBox1.SelectedItem);
                        return;
                    }
                    pBookmark = pEnumBookmark.Next();
                }
            }
        }

笔记

 IMap pMap = AxMapControl1.Map;
                    IMapBookmarks pMapMarks = pMap as IMapBookmarks;

相当于

IMapBookmarks pMapMarks = AxMapControl1.pMap as IMapBookmarks;

AOIBOOKMARK类查询,父类是谁,相互之间关系是什么

https://blog.csdn.net/GISer_rookie/article/details/88422814
https://blog.csdn.net/weixin_30687051/article/details/95387409
https://blog.csdn.net/weixin_42032107/article/details/80835697

通过IMapBookmarks接口的Bookmarks属性可以得到地图文档中已经存在的所有书签对象,通过该接口的AddBookmark和RemoveBookmark方法可以对书签进行添加和删除。

ISpatialBookmark接口定义所有空间书签的共同功能,特别是书签的Name属性和ZoomTo方法。Name属性定义了书签的名字,通过ZoomTo方法可跳转到书签位置点。

IAOIBookmark接口继承自ISpatialBookmark接口,新增了Location属性,用于存储地图中感兴趣的范围。
在这里插入图片描述

书签的添加

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MapControl2
{
    public partial class frmAddBookMark : Form
    {
        string _BookMarkName;



        public frmAddBookMark()
        {
            InitializeComponent();
        }

        public string BookMarkName { get => _BookMarkName; set => _BookMarkName = value; }

        private void button1_Click(object sender, EventArgs e)
        {
            this.BookMarkName = textBox1.Text;
            //给标签名称的属性赋值为文本框中的内容
            this.DialogResult = DialogResult.OK;
        }

        private void frmAddBookMark_Load(object sender, EventArgs e)
        {

        }
    }
}

书签的管理

把所有书签名字取下来,放在这个地方,什么时间去进行bookmarks的访问呢?

不是在窗体new的时候,第一个激发的事件是load事件,我们要在这里写代码,添加。双击则激发doubleclick事件,根据所选择的名称,在bookmarks里面去找,在这里去找,把范围给它,放在感兴趣区域。弹出来的窗口和主窗口有无关系呢

我想反映的是主窗口地图上显示的地图,如果没有建立关系,则无法去访问,我们可以定义一个IMAP属性,我们可以创造一个构造参数穿进去

构造函数里面赋值,传进一个MAP来
map字段相当于给他赋值

习惯命名:
字段前面加 下划线 _ 。


mapcontrol加载时候,会激发mapreplace事件,地图窗口发生了变更和替换,就会激发replace事件处理函数,要做什么事情呢,要把地图控件里面的地图访问到,以此加到MapControl2当中,一旦replace就更新

rectangleELEment

https://blog.csdn.net/sonikk/article/details/12202931

rgbcolor类

transparency透明度
矩形框设置符号
填充符号
线符号
面符号
矩形框要用线符号进行表达
简单线符号的定义
简单线符号赋色
简单线符号宽度

定义一个填充符号
中间要透明的填充,即矩形框透明限制
中间填充是简单填充符号是透明色
边界是线符号
简单填重符号里面的symbol进行赋值

定义的一个矩形要素
给元素设置填充符号,找到填充符号,

矩形框
点,面
四种颜色模型 印刷色
简单线符号,复杂线符号

extend事件还没有执行,地图窗口范围更新
鹰眼窗口中比例尺不变,按住右键拉框,根据我拉的框,地图范围就被显示了

拉着窗口一定,可以显示。鼠标点或者单击都是mousedown,

几何对象的认识,点,线,面,等等

geometry

在方法前加前缀,可以定义到底调用哪一个库里的对象或者函数或者方法

一、Geometry类的层次
几何类定义了下述层次:

· Geometry(非实例化)

· Point(可实例化的)

· Curve(非实例化)

· LineString(可实例化的)

· Line

· LinearRing

· Surface(非实例化)

· Polygon(可实例化的)

· GeometryCollection(可实例化的)

· MultiPoint(可实例化的)

· MultiCurve(非实例化)

· MultiLineString(可实例化的)

· MultiSurface(非实例化)

· MultiPolygon(可实例化的)

不能在非实例化类中创建对象。能够在可实例化类中创建对象。所有类均有属性,可实例化类还可以包含声明(定义有效类实例的规则)。

Geometry是一种基本类。它是一种抽象类。 Geometry的可实例化子类限制为可在2维坐标空间中存在的0、1、2维几何对象。所有的可实例化几何类是这样定义的,从而使得几何类的实例从拓扑意义上讲是闭合的(也就是说,所有定义的几何类包含其边界)。

基本Geometry类具有关于Point、Curve、Surface和GeometryCollection的子类:

· Point表示0维对象。

· Curve表示1维对象,具有子类LineString,以及次级子类Line和LinearRing。

· Surface是为2维对象设计的,具有子类Polygon。

· GeometryCollection具有特殊的0维、1维和2维类集合,名为MultiPoint、MultiLineString和MultiPolygon,分别用于为对应的Points、LineStrings和Polygons集合进行几何建模。MultiCurve和MultiSurface是作为抽象超类引入的,它们归纳了用于处理Curves和Surfaces的集合接口。

Geometry、Curve、Surface、MultiCurve和MultiSurface定义为非实例化类。它们为其子类定义了公用方法集合,而且是为扩展而包含在内的。

Point、LineString、Polygon、GeometryCollection、MultiPoint、MultiLineString和MultiPolygon定义为可实例化类。

二、类Geometry
Geometry是层次结构的根类。它是一种非实例化类,但具有很多属性,这些属性对由任何Geometry子类创建的所有几何值来说是共同的。下面介绍了这些属性(尤其是具有自己特殊属性的子类)。

Geometry属性

Geometry值具有下述属性:

· 其type(类型)。每个geometry属于层次结构中可实例化类之一。

· 其SRID,或空间参考ID。该值确定了用于描述定义几何对象的坐标空间的空间坐标系统。

在MySQL中,SRID值仅是与geometry值相关的整数值。所有计算均是在欧几里得几何系(平面)中进行的。

· 它在其空间坐标系统中的coordinates(坐标),表示为双精度数值(8字节)。所有的非空几何对象至少包含一对坐标(X、Y)。空几何对象不含坐标。

坐标与SRID相关。例如,在不同的坐标系内,两个对象之间的距离会有所不同,即使这两个对象具有相同的坐标也同样。这是因为,平面坐标系中的距离和地心坐标系(地球表面上的坐标)中的距离是不同的事项。

· 其interior(内部)、boundary(边界)和exterior(外部)。

每个几何对象均占据空间中的某一位置。几何对象的exterior(外部)指的是未被该对象占据的所有空间。其interior(内部)指的是被该对象占据的空间。其boundary(边界)指的是几何对象内部和外部之间的界面。

· 其MBR(最小边界矩形)或包络面。这是一种边界几何值,由最小和最大坐标(X,Y)构成。

· ((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))

· 无论值是简单的或非简单的。类型(LineString、MultiPoint、MultiLineString)的几何值或是简单的,或是非简单的。每个类型决定了其自己的简单或非简单声明。

· 无论值是封闭的或非封闭的。类型(LineString、MultiPoint)的几何值或是封闭的,或是非封闭的。每个类型决定了其自己的封闭或非封闭声明。

· 无论值是空的或非空的。如果没有任何点,几何对象是空的。空几何对象的内部、外部和边界未定义(也就是说,它们由Null值表示)。空的几何对象定义为总是简单的,面积为0。

· 其dimension(维数)。几何对象的维数为−1、0、1或2

o −1用于空几何对象。

o 0用于无长度、无面积的几何对象。

o 1用于具有非0长度和0面积的几何对象。

o 2用于具有非0面积的几何对象。

Point对象的维数为0。LineString对象的维数为1。 Polygon对象的维数为2。MultiPoint、MultiLineString和MultiPolygon对象的维数与构成它们的元素的维数相同。

三、类Point
Point(点)指的是代表坐标空间中单个位置的几何类。

Point示例

· 想像一张具有众多城市的大世界地图。每个Point对象可代表1个城市。

· 在城市地图上,Point对象可代表1个公共汽车站。

Point属性

· X-坐标值。

· Y-坐标值。

· Point定义为0维几何对象。

· Point的边界为空集合。

颜色模型

https://zhuanlan.zhihu.com/p/28741691
https://blog.csdn.net/zdyueguanyun/article/details/8575865
https://blog.csdn.net/qq_34106574/article/details/80733067
https://blog.csdn.net/bjbz_cxy/article/details/79701006?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

常见颜色模型
颜色模型就是描述用一组数值来描述颜色的数学模型。例如coding时最常见的RGB模型,就是用RGB三个数值来描述颜色。通常颜色模型分为两类:设备相关和设备无关。

设备无关的颜色模型:这类颜色模型是基于人眼对色彩感知的度量建立的数学模型,例如上面提到的CIE-RGB、CIE-XYZ颜色模型,再比如由此衍生的CIE-xyY、CIE-Luv、CIE-Lab等颜色模型。这些颜色模型主要用于计算和测量。

设备相关的颜色模型:以最长见的RGB模型为例,一组确定的RGB数值,在一个液晶屏上显示,最终会作用到三色LED的电压上。这样一组值在不同设备上解释时,得到的颜色可能并不相同。再比如CMYK模型需要依赖打印设备解释。常见的设备相关模型有:RGB、CMYK、YUV、HSL、HSB(HSV)、YCbCr等。这类颜色模型主要用于设备显示、数据传输等。

下面就对这些颜色模型一一作出解释。

CIE-RGB
正如上面写的,这个模型是由真实的人眼颜色匹配实验得出的模型,RGB分别表示那三个固定波长的光的份量。
此处输入图片的描述

CIE-XYZ
上面也有,就是根据CIE-RGB进行变换得到的颜色模型,XYZ分别表示三个假想色的光的份量。通常简写为XYZ颜色模型。
此处输入图片的描述

CIE-Yxy
该模型由CIE-XYZ衍生得来。其中, Yxy中的Y表示光的亮度。这个模型投影到x-y平面上即上面的CIE1931-XYZ色度图。其中x、y分量的取值范围是[0,1]。有时该模型也被称作CIE-xyY。
此处输入图片的描述
还有许多,不再详尽说明。

RGB
最常见的颜色模型,设备相关。三个数值代表R、G、B分量,取值均为[0,255]。

**CMYK、CMY
这个颜色模型常用于印刷出版。CMYK表示青(Cyan)品红(Magenta)黄(Yellow)黑(BlacK)四种颜料。由于颜料的特性,该模型也是与设备相关的。**相对于RGB的加色混色模型,CMY是减色混色模型,颜色混在一起,亮度会降低。之所以加入黑色是因为打印时由品红、黄、青构成的黑色不够纯粹。
此处输入图片的描述
通常其能表现的色域很小,如下图。
此处输入图片的描述

**HSL、HSV
HSL和HSV的颜色模型比较相近,它们用来描述颜色相对于RGB等模型显得更加自然。**电脑绘画时,这两个模型非常受到欢迎。

HSL和HSV中,H都表示色相(Hue)。通常该值取值范围是[0°,360°],对应红橙黄绿青蓝紫-红这样顺序的颜色,构成一个首尾相接的色相环。色相的物理意义就是光的波长,不同波长的光呈现了不同的色相。

HSL和HSV中,S都表示饱和度(Saturation)(有时也称为色度、彩度)即色彩的纯净程度。例如龙袍的金黄色饱和度就比屎黄色高。对应到到物理意义上:即一束光可能由很多种不同波长的单色光构成,波长越多越分散,则色彩的纯净程度越低,而单色的光构成的色彩纯净度就很高。

两个颜色模型不同的就是最后一个份量。
HSL中的L表示亮度(Lightness/Luminance/Intensity)。根据缩写不同HSL有时也称作HLS或HSI(就是说HSL、HLS、HSI是一回事)。
HSV中的V表示明度(Value/Brightness)。根据缩写不同,HSV有时也被称作HSB(就是说HSV和HSB是一回事)。

**YUV、YCbCr(YCC)、YPbPr、YDbDr、YIQ
这些颜色模型大都是用在电视系统、数位摄影等地方。**其中的Y分量都表示的是明亮度(Luminance、Luma)。

**YUV颜色模型中,U、V表示的是色度(Chrominance/Chroma)。**YUV是欧洲电视系统所采用的颜色模型(属于PAL制式),颜色被分为一个亮度信号和两个色差信号进行传输。

YCbCr(简称YCC)中,Cb和Cr蓝色(blue)和红色(red)的色度。 YCbCr是YUV的压缩和偏移的版本。

YPbPr类似YCbCr,与之不同的是,YPbPr选用的CIE色度坐标略有不同。一般SDTV传输的色差信号被称作Cb、Cr,而HDTV传输的色差信号被称作Pb、Pr。

YDbDr也类似YCbCr,同样也是色度坐标不同。YDbDr是SECAM制式电视系统所用的颜色模型。

YIQ也和上面的类似。。是用在了NTSC制式的的电视系统里。
此处输入图片的描述
全球电视系统制式分布,PAL用YUV、SECAM用YDbDr、NTSC用YIQ

下面再说一些人听懂的话:
YCbCr颜色空间,也就是YUV,YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和CB来表示。其中,Cr反映了GB输入信号红色部分与RGB信号亮度值之间的差异。而CB反映的是RGB输入信号蓝色部分与RGB信号亮度值之同的差异。
  采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
  
  Y代表的灰度级较高,而CrCb则相对灰度值要少些。
这里写图片描述
从上图可以看出区别,Y对应的就是灰度或者说是亮度,而Cb、Cr则相对灰度级较少,人眼分辨差异较大。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值