EASYX剪切区域

eg1:EASY中的颜色模型

可以参考推荐16进制颜色表: https://www.codeeeee.com/color/rgb.html
参考学习EASYX在线文档 https://docs.easyx.cn/zh-cn/drawing-func

easyx的基本概念和使用方式

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 计算机使用RGB的原则,使用多种颜色混合的方式呈现出不同的颜色colorref RGB(red,green,blue);
    //colorref HSVtoRGB(float H,float S,float V); H 表示色像,参数S 表示饱和度取值范围在0-1之间,参数V叫明度取值范围在0-1之间
    initgraph(800, 600);
    //setbkcolor(RGB(134, 172, 242));
    setbkcolor(HSVtoRGB(219, 0.15, 0.95));
    cleardevice();
    getchar();
    closegraph();
    // HSV颜色模型,采用色相饱和度的方式选择使用的颜色,或者是亮度的方式

    return 0;

}

使用easyx绘制彩虹的颜色

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 绘制彩虹的颜色
    initgraph(800, 600);
    float dH = 360.0 / 600.0;
    float h = 0;
    for (int y = 0; y < 600; y++) {
        setlinecolor(HSVtoRGB(h, 1, 1));
        line(0, y, 800, y);
        h += dH;
    }
    getchar();
    closegraph();
    return 0;
}


easyx绘制彩虹窗体

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 绘制彩虹的颜色
    initgraph(800, 600);
    float s = 0.76;
    float ds = s/600;
    for (int y = 0; y < 600; y++) {
        setlinecolor(HSVtoRGB(216, s, 0.95));
        line(0, y, 800, y);
        s -= ds;
    }
    // 定义一个变量H为色相从0开始逐渐递增变化
    float h = 0;
    // dh表示每份之间的色相差
    float dH = 360.0 / 100;
    //使用for循环从半径300开始绘制同心圆
    for (int r = 300; r >= 200; r--) {
        setlinecolor(HSVtoRGB(h,1,1));
        // 绘制同心圆
        circle(400, 600, r);
        h += dH;

    }
    getchar();
    closegraph();
    return 0;

}


easyx绘制显示器

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 创建窗体
    initgraph(800, 600);
    setbkcolor(WHITE);
    cleardevice();
    // 绘制圆角矩形
    setfillcolor(RGB(232, 235, 240)); // setfillcolor函数设置填充颜色
    solidroundrect(100, 50, 700, 450, 20, 20); // 绘制圆角矩形函数

    // 绘制矩形
    setfillcolor(RGB(71, 78, 94)); // 设置填充颜色
    solidrectangle(100, 390, 700, 410); // 绘制对应的蓝黑色矩形
    
    // 直接调用solidroundrect()函数绘制蓝黑色的矩形
    solidroundrect(100, 50, 700, 410, 20, 20);
    
    // 绘制天蓝色的填充颜色
    setfillcolor(RGB(115, 199, 235));
    solidrectangle(120, 70, 680, 390);
    
    // 绘制圆形摄像头
    setfillcolor(RGB(232, 235, 240));
    solidcircle(400, 60, 5);
    
    // 绘制电脑的开机键
    setfillcolor(RGB(71, 78, 94));
    solidcircle(400, 430, 12);
    
    // 绘制椭圆形的底座
    setfillcolor(RGB(218,219,224));
    solidellipse(275, 515, 525, 545);
    
    // 绘制梯形为椭圆形的底座
    setfillcolor(RGB(232, 235, 240));
    // POINT 类型的数组保存T型4个顶点的坐标
    POINT bigTrapezoid[4] = { {345,450},{455,450},{475,530},{325,530} };
    // 绘制银色的梯形支架
    solidpolygon(bigTrapezoid, 4);
    
    getchar();
    // 关闭画布
    closegraph();
    return 0;

}


EASTX绘制组图案

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 绘制一个800*800的画布
    initgraph(800, 800);
    // 将画布的圆心设置在画布中心的位置山
    setorigin(400, 400);
    // 翻转Y轴,形成直角坐标系
    setaspectratio(1, -1);
    // 绘制画布的背景颜色
    setbkcolor(RGB(248, 248, 255));
    // 清除画布的样式让画布按自己的方式呈现出来
    cleardevice();
    // 设置描边的样式为黑色
    setlinecolor(BLACK);
    // 绘制线段的样式风格和线段的粗细,设置描边为实线,粗细为10px
    setlinestyle(PS_SOLID, 10);
    int r = 150;
    // 绘制一个圆心为0 ,0 半径为10的圆
    circle(0, 0, r);
    // 通过for循环依托第一个圆绘制另外的6个圆
    for (int i = 0; i < 6; i++) {
        int x;
        int y;
        // 使用三角函数计算圆心的位置
        x = cos(i * PI / 3) * r;
        y = sin(i * PI / 3) * r;
        // 绘制圆心为(x,y)半径为r的圆
        circle(x, y, r);
    }
    getchar();
    closegraph();
    return 0;
}


EASYX绘制剪切区域

cpp 复制代码
/*
  创建剪切区域,绘制在剪切区域内的图形会被保留,绘制在剪切区域外的图形不会被保留
  目前WINDOWS GDI中提供了4个函数用于创建剪切区域
  createFllipiticRgn:用于创建椭圆区域
  createPolygoncRgn: 用于创建多边形区域
  createRectRhn: 用于创建矩形
  createRoundRectRgn: 用于创建圆角矩形

*/

剪切区域后的代码

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 绘制一个800*800的画布
    initgraph(800, 800);
    // 将画布的圆心设置在画布中心的位置山
    setorigin(400, 400);
    // 翻转Y轴,形成直角坐标系
    setaspectratio(1, -1);
    // 绘制画布的背景颜色
    setbkcolor(RGB(248, 248, 255));
    // 清除画布的样式让画布按自己的方式呈现出来
    cleardevice();
    // 设置描边的样式为黑色
    setlinecolor(BLACK);
    // 绘制线段的样式风格和线段的粗细,设置描边为实线,粗细为10px
    setlinestyle(PS_SOLID, 10);
    int r = 150;
    /*
         创建剪切区域,绘制在剪切区域内的图形会被保留,绘制在剪切区域外的图形不会被保留
         目前WINDOWS GDI中提供了4个函数用于创建剪切区域
         createFllipiticRgn:用于创建椭圆区域
         createPolygoncRgn: 用于创建多边形区域
         createRectRhn: 用于创建矩形
         createRoundRectRgn: 用于创建圆角矩形

   */
    // 创建圆形区域
    HRGN rgn = CreateEllipticRgn(250, 250, 550, 550);
    // 设置剪切区域的函数setcliprgn将刚刚简历的圆形区域设置为剪切区域
    setcliprgn(rgn);

    // 绘制一个圆心为0 ,0 半径为10的圆
    circle(0, 0, r);
    // 通过for循环依托第一个圆绘制另外的6个圆
    for (int i = 0; i < 6; i++) {
        int x;
        int y;
        // 使用三角函数计算圆心的位置
        x = cos(i * PI / 3) * r;
        y = sin(i * PI / 3) * r;
        // 绘制圆心为(x,y)半径为r的圆
        circle(x, y, r);
    }
    // 绘制剪切区域成功后将剪切区域设置为null后面的绘制操作将不会受到剪切区域的影响
    setcliprgn(NULL);
    // 销毁之前创建的圆形区域
    DeleteObject(rgn);


    getchar();
    closegraph();
    return 0;

}


EASYX组合区域

cpp 复制代码
/*
   组合区域:组合区域函数
   int CombineRgn(
      HRGN hrgnDst, // 目标区域
      HRGN hrgnSRC1,// 源区域1
      HRGN hrgnSrc2,// 源区域2
      int iMode  // 区域的组合模式,作用在于让源区域1和源区域2以某种的方式进行组合得到某种新的组合方式

   );
*/

剪切区域之交集

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 绘制一个800*800的画布
    initgraph(800, 800);
    // 将画布的圆心设置在画布中心的位置山
    setorigin(400, 400);
    // 翻转Y轴,形成直角坐标系
    setaspectratio(1, -1);
    // 绘制画布的背景颜色
    setbkcolor(RGB(248, 248, 255));
    // 清除画布的样式让画布按自己的方式呈现出来
    cleardevice();
    // 设置描边的样式为黑色
    setlinecolor(BLACK);
    // 绘制线段的样式风格和线段的粗细,设置描边为实线,粗细为10px
    setlinestyle(PS_SOLID, 10);
    int r = 150;
    /*
         创建剪切区域,绘制在剪切区域内的图形会被保留,绘制在剪切区域外的图形不会被保留
         目前WINDOWS GDI中提供了4个函数用于创建剪切区域
         createFllipiticRgn:用于创建椭圆区域
         createPolygoncRgn: 用于创建多边形区域
         createRectRhn: 用于创建矩形
         createRoundRectRgn: 用于创建圆角矩形

   */
    // EASYX剪切区域的代码
    HRGN rgn1 = CreateEllipticRgn(250, 250, 550, 550);
    HRGN rgn2 = CreateEllipticRgn(250, 100, 550, 400);
    HRGN rgn = CreateRectRgn(0, 0, 0, 0);
    // 图像的组合模式为交集RGN_AND
    CombineRgn(rgn, rgn1, rgn2, RGN_AND); 

    // 设置剪切区域的函数setcliprgn将刚刚简历的圆形区域设置为剪切区域
    setcliprgn(rgn);
    
    // 绘制一个圆心为0 ,0 半径为10的圆
    circle(0, 0, r);
    // 通过for循环依托第一个圆绘制另外的6个圆
    for (int i = 0; i < 6; i++) {
        int x;
        int y;
        // 使用三角函数计算圆心的位置
        x = cos(i * PI / 3) * r;
        y = sin(i * PI / 3) * r;
        // 绘制圆心为(x,y)半径为r的圆
        circle(x, y, r);
    }
    // 绘制剪切区域成功后将剪切区域设置为null后面的绘制操作将不会受到剪切区域的影响
    setcliprgn(NULL);
    // 销毁之前创建的圆形区域
    DeleteObject(rgn1);
    DeleteObject(rgn2);
    DeleteObject(rgn);
    
    /*
       组合区域:组合区域函数
       int CombineRgn(
          HRGN hrgnDst, // 目标区域
          HRGN hrgnSRC1,// 源区域1
          HRGN hrgnSrc2,// 源区域2
          int iMode  // 区域的组合模式,作用在于让源区域1和源区域2以某种的方式进行组合得到某种新的组合方式
    
       );
    */
    
    getchar();
    closegraph();
    return 0;

}


组合模式之差集


组合模式之并集


并集排除交叠区域


绘制卡通熊头像

cpp 复制代码
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    initgraph(800, 600);
    setbkcolor(RGB(169, 92, 10));
    cleardevice();
    // 绘制卡通熊的耳朵和耳朵的阴影
    setfillcolor(RGB(130, 69, 4));
    solidcircle(200, 130, 90);
    solidcircle(600, 130, 90);
    setfillcolor(RGB(255, 178, 50));
    solidcircle(200, 120, 90);
    solidcircle(600, 120, 90);
    //绘制耳朵的高光
    HRGN leftEarClip =
        CreateEllipticRgn(110, 30, 290, 210);
    HRGN rightEarClip =
        CreateEllipticRgn(510, 30, 690, 210);
    HRGN earsClip =
        CreateRectRgn(0, 0, 0, 0);
    CombineRgn(earsClip, leftEarClip, rightEarClip, RGN_OR);
    setcliprgn(earsClip);

    setfillcolor(RGB(243, 154, 2));
    solidcircle(200, 130, 90);
    solidcircle(600, 130, 90);
    
    // 绘制出耳朵的形状
    setfillcolor(RGB(255, 178, 50));
    solidcircle(200, 210, 90);
    solidcircle(600, 210, 90);
    
    // 释放之前创建的3个区域
    DeleteObject(leftEarClip);
    DeleteObject(rightEarClip);
    DeleteObject(earsClip);
    setcliprgn(NULL);
    // 绘制卡通熊的头部
    setfillcolor(RGB(255, 178, 50));
    solidcircle(400, 300, 250);
    // 创建和设置圆形剪切区域
    HRGN headClip =
        CreateEllipticRgn(150, 50, 650, 550);
    setcliprgn(headClip);
    //绘制圆形高光
    setfillcolor(RGB(243, 154, 2));
    solidcircle(400, 320, 250);
    // 释放前面建立的区域
    DeleteObject(headClip);
    setcliprgn(NULL);
    
    // 绘制卡通熊的眼睛
    setfillcolor(RGB(51, 34, 8));
    solidcircle(275, 300, 25);
    solidcircle(525, 300, 25);
    // 绘制卡通熊的嘴巴
    setfillcolor(RGB(130, 69, 4));
    solidellipse(310, 385, 490, 485);
    
    setfillcolor(WHITE);
    solidellipse(310, 380, 490, 480);
    
    // 绘制卡通熊的鼻子和胡须
    setfillcolor(RGB(51, 34, 8));
    solidcircle(400, 420, 15);
    
    // 卡通熊的胡须
    setlinestyle(PS_SOLID, 5);
    setlinecolor(RGB(51, 34, 8));
    line(400, 420, 370, 450);
    line(400, 420, 430, 450);
    
    getchar();
    closegraph();
    return 0;

}
相关推荐
励志成为嵌入式工程师26 分钟前
c语言简单编程练习9
c语言·开发语言·算法·vim
Peter_chq1 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
hikktn3 小时前
如何在 Rust 中实现内存安全:与 C/C++ 的对比分析
c语言·安全·rust
观音山保我别报错3 小时前
C语言扫雷小游戏
c语言·开发语言·算法
小林熬夜学编程5 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
墨墨祺5 小时前
嵌入式之C语言(基础篇)
c语言·开发语言
躺不平的理查德5 小时前
数据结构-链表【chapter1】【c语言版】
c语言·开发语言·数据结构·链表·visual studio
幼儿园园霸柒柒7 小时前
第七章: 7.3求一个3*3的整型矩阵对角线元素之和
c语言·c++·算法·矩阵·c#·1024程序员节
好想有猫猫7 小时前
【51单片机】串口通信原理 + 使用
c语言·单片机·嵌入式硬件·51单片机·1024程序员节
摆烂小白敲代码8 小时前
背包九讲——背包问题求方案数
c语言·c++·算法·背包问题·背包问题求方案数