C语言怎样复制图形?

一、问题

C语⾔中如何实现把屏幕某⼀处的图形复制到另⼀处?

二、解答

复制图形要⽤到以下3个函数:

cpp 复制代码
void far getimage(int xl,nt yl, int x2,int y2, void far *mapbuf); 
void far putimge(int x,int,y,void *mapbuf, int op); 
unsined far imagesize(int x1,int y1,int x2,int y2);

这3个函数⽤于将屏幕上的图像复制到内存,然后再将内存中的图像送回到屏幕上。 ⾸先通过函数 imagesize( ) 测试要保存左上角为(x1,y1),右上⾓为(x2,y2)的图形屏幕区域内的全部内容需多少个字节,然后再给 mapbuf 分配⼀个所测数字节内存空间的指针。通过调⽤ getimage( ) 函数就可将该区域内的图像保存在内存中,需要时可⽤ putimage( ) 函数将该图像输出到左上角为点(x,y)的位置上,其中 getimage( ) 函数中的参数 op 规定如何释放内存中图像。关于这个参数的定义如下表所示。

|----------|----|------------|
| 符号常数 | 数值 | 含义 |
| COPY_PUT | 0 | 复制 |
| XOR_PUT | 1 | 与屏幕图像异或的复制 |
| OR_PUT | 2 | 与屏幕图像或后复制 |
| AND_PUT | 3 | 与屏幕图像与后复制 |
| NOT_PUT | 4 | 复制反像的图形 |

对于 imagesize(函数,只能返回字节数⼩于 64K 字节的图像区域,否则将会出错,出错时返回-1。

下⾯程序模拟两个⼩球动态碰撞过程

cpp 复制代码
#include <stdio.h>
#include <alloc.h>
#include <graphics.h>

int main()
{
    int i, driver = DETECT, mode, size;
    void *buf, initgraph(&driver, &mode, "");
    setbkcolor(BLUE);
    setcolor(LIGHTRED);
    setfillstyle(SOLID_FILL, LIGHTGREEN);
    circle(100, 200, 30);
    floodfill(100, 200, 12);
    size = imagesize(69, 169, 131, 231);
    buf = malloc(size);
    if (!buf)
        return -1;
    getimage(69, 169, 131, 231, buf);
    putimage(500, 269, buf, COPY_PUT);
    for (i = 0; i < 185; i++)
    {
        putimage(70 + i, 170, buf, COPY_PUT);
        putimage(500 - i, 170, but, COPY_PUT);
        delay(10000);
    }
    for (i = 0, i < 185; i++)
    {
        putimage(255 - i, 170, buf, COPY_PUT);
        putimage(315 + i, 170, buf, COPY_PUT);
        delay(1000);
        getch();
        closegraph();
    }
}

三、总结

复制现有图形,有时⽐重新画要省事得多,因此复制图形功能很有⽤。

相关推荐
麦兜*4 小时前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
Coovally AI模型快速验证5 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun5 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
萧鼎5 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
RaymondZhao346 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
艾伦~耶格尔6 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
zhangfeng11336 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
yujkss6 小时前
Python脚本每天爬取微博热搜-终版
开发语言·python
yzx9910136 小时前
小程序开发APP
开发语言·人工智能·python·yolo
啊阿狸不会拉杆7 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法