zoukankan      html  css  js  c++  java
  • 《WPF程序设计指南》读书笔记——第2章 基本画刷

    1.Color结构

    using System;
    using System.Windows;
    using System.Windows.Input;
    using System.Windows.Media;
    
    namespace LY.VaryTheBackGround
    {
        public class VaryTheBackGround : Window
        {
            SolidColorBrush brush = new SolidColorBrush(Colors.Beige);
            [STAThread]
            public static void Main()
            {
                new Application().Run(new VaryTheBackGround());
            }
            public VaryTheBackGround()
            {
                Title = "Vary the Background";
                Width = 384;
                Height = 384;
                WindowStartupLocation = WindowStartupLocation.CenterScreen;
                WindowStyle = WindowStyle.ToolWindow;
                ResizeMode = ResizeMode.CanMinimize;
                Background = brush;
            }
            protected override void OnMouseMove(MouseEventArgs e)
            {
                base.OnMouseMove(e);
                double width = ActualWidth -
                    2 * SystemParameters.ResizeFrameVerticalBorderWidth;
                double height = ActualHeight -
                    2 * SystemParameters.ResizeFrameHorizontalBorderHeight -
                    SystemParameters.CaptionHeight;
                Point ptMouse = e.GetPosition(this);
                Point ptCenter = new Point(Width / 2, Height / 2);
                Vector vectMouse = ptMouse - ptCenter;
                double angle = Math.Atan2(vectMouse.Y, vectMouse.X);
                Color cr = brush.Color;
                cr.ScR = cr.ScG = cr.ScB = (float)angle;
                brush.Color = cr;
            }
        }
    }
    

      1)Color结构定义在System.Window.Media命名空间中;有4个基本属性A(alpha通道,表示不透明度)、R、G、B,值为byte类型,范围0-255;如果要表示更丰富的色彩,可以使用scRGB颜色空间,值为float类型,范围0-255;背景色的改变要通过画刷Brush类(Brush是抽象类,具体要通过某种类型的画刷类,如单色画刷SolidColorBrush类),而不能直接通过颜色Color类,这就如同要刷墙,要通过刷子,颜料才能被涂抹到墙上。

      2)结构可以用new来初始化,也可以不用new,直接给属性赋值;Color结构只有无参的构造函数,初始化后的A、R、G、B值都是0;Color结构还有一些静态方法,如Color.FromArgb、Color.FromRgb、Color.FromScRgb用于创建Color对象。

      3)Point表示坐标点,Vector为向量(一个值为长度,另一个为方向),都是结构体;两个Point相减结果是一个Vector。

    2.画刷类型

      1)有单色画刷、渐变画刷(线性渐变和辐射渐变画刷)和可平铺画刷(包括三种)。

      2)Colors类、Brushes类都提供了141个静态属性,表示预设的一些颜色;还可以通过SystemColors类得到用户当前系统的配色值。需要注意的是Brushes、SystemColors类都继承自Freezable类,如“SolidColorBrush brush = Colors.Beige”使用后的brush对象会被冻结,即颜色值不能再被更改。

      3)渐变画刷通过确定起止点和颜色种类来实现渐变,如new LinearGradientBrush(Colors.Blace,Colors.White,new Point(0,0),new Point(0.75,0.75));这里使用相对于表面的单位,即窗口坐标从(0,0)到最大的(1,1),长宽都是1个单位大小。

      4)可以通过GradientStop属性可以设定渐变的分界点,GradientStops集合可以设定画刷上有多个分界点。

  • 相关阅读:
    学习opencv跟轮廓相关的
    opencv 连通域需要的函数解析
    【7.4】__new__和__init__的区别
    【7.3】属性描述符和属性查找过程
    【7.2】__getattr__、__getattribute__魔法函数
    【7.1】property动态属性
    【6.4】一个经典的参数错误
    【6.3】del语句和垃圾回收
    【6.2】==和is的区别
    【6.1】python中的变量是什么
  • 原文地址:https://www.cnblogs.com/pemp/p/3263732.html
Copyright © 2011-2022 走看看