C语言怎样复制图形?

一、问题

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

二、解答

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

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_PUT0复制
XOR_PUT1与屏幕图像异或的复制
OR_PUT2与屏幕图像或后复制
AND_PUT3与屏幕图像与后复制
NOT_PUT4复制反像的图形

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

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

#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();
    }
}

三、总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/717704.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

APP Android

APP Android 安卓源生应用程序 APP IOS-CSDN博客 05.04 06:11Testing

MySQL修改用户权限(宝塔)

在我们安装好的MySQL中&#xff0c;很可能对应某些操作时&#xff0c;不具备操作的权限&#xff0c;如下是解决这些问题的方法 我以宝塔创建数据库为例&#xff0c;创建完成后&#xff0c;以创建的用户名和密码登录 这里宝塔中容易发生问题的地方&#xff0c;登录不上去&#…

电离层对流层延迟解算

前言&#xff1a; 本章节代码均在Gitee中开源&#xff1a; 电离层对流层延迟解算https://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E7%94%B5%E7%A6%BB%E5%B1%82%E5%AF%B9%E6%B5%81%E5%B1%82%E8%AF%A…

Python学习笔记12:进阶篇(一),类的相关知识

前言 在讲类之前&#xff0c;我们简单介绍一些Python的知识。这些知识在入门篇没讲&#xff0c;想学Python的&#xff0c;基本都对Python有基础的了解&#xff0c;但是今天开始的进阶知识&#xff0c;会涉及到一些Python的特性&#xff0c;所以在这里介绍一下。 Python是一种高…

数据仓库与数据挖掘(期末复习)

数据仓库与数据挖掘&#xff08;期末复习&#xff09; ETL的含义Extract 、 Transformation、Load。 ODS的全称Operational Data Store。 DW全称 Data Warehourse DM全称是Data Mart 数据仓库数据抽取时所用到技术是增量、全量、定时、调度 STAGE层作用是提供业务系统数据…

HTC手机卷土重来,价格和配置给我看麻了

第一眼看到我是不敢相信的&#xff0c;HTC 竟然还活着。 提到 HTC&#xff0c;相信不少同学会发出「那是我在夕阳下奔跑并逝去的青春」这样的感叹吧。 曾经辉煌一时的手机大佬&#xff0c;市占率曾一度达到 15%。 璀璨就如同天边一闪而过的流星。关于它的风光地位&#xff0c;…

FinalShell 连接虚拟机超时,主机ping不通虚拟机,解决

出现问题&#xff1a; 连接主机...java.net.ConnectException: Connection timed out: connect 在排查错误时发现&#xff1a; 虚拟机内能互相ping通&#xff0c;虚拟机能ping通主机 但是主机的cmd命令ping不通虚拟机 问题原因&#xff1a; 虚拟机内能互相ping通&#xff0…

基于Java+Swing贪吃蛇小游戏(含课程报告)

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

计算机组成原理历年考研真题对应知识点(数制与编码)

目录 2.1数制与编码 2.1.1进位计数制及其相互转换 【命题追踪——采用二进制编码的原因(2018)】 【命题追踪——十进制小数转换为二进制小数(2021、2022)】 2.1.2 定点数的编码表示 【命题追踪——补码的表示范围(2010、2013、2014、2022)】 【命题追踪——补码和真值的相…

Debian/Ubuntu linux安装软件

1、官方软件商店安装 2、deb包安装 报错不是sudoers&#xff0c;首先将用户添加到sudo su -l adduser USERNAME sudo exit然后&#xff0c;退出桌面环境并再次登录。 您可以通过输入以下内容来检查上述过程是否成功&#xff1a; groups下载deb包 altshiftf4或右键打开命令行…

【第16章】Vue实战篇之跨域解决

文章目录 前言一、浏览器跨域二、配置代理1.公共请求2.代理配置 总结 前言 前后端项目分离衍生出浏览器跨域问题&#xff0c;开发之前我们通过配置代理解决这个问题。 一、浏览器跨域 浏览器的跨域问题主要是由于浏览器的同源策略导致的。同源策略是浏览器的一个安全功能&…

XZ后门故事:初始分析

2024年3月29日&#xff0c;Openwall OSS安全邮件列表上的一条消息“炸醒”了整个信息安全、开源和Linux社区&#xff1a;XZ出现了一个CVSS评分10.0的恶意后门。 这个后门库的特殊危险在于OpenSSH服务器进程sshd使用它。在多个基于systemd的发行版上&#xff08;包括Ubuntu、De…

信用VS抵押:贷款的两面镜子

说到贷款这事儿&#xff0c;大家首先想到的可能是有稳定工作、房子或车子的人。 其实&#xff0c;没这些也能贷款&#xff0c;比如咱们还在学校时&#xff0c;银行就来办信用卡了&#xff0c;这就是信用借款的起点。 毕业后&#xff0c;刚工作没钱又想闯&#xff0c;不少人宁愿…

C# 通过Win32API设置客户端系统时间

在日常工作中&#xff0c;有时可能会需要获取或修改客户端电脑的系统时间&#xff0c;比如软件设置了Licence有效期&#xff0c;预计2024-06-01 00:00:00到期&#xff0c;如果客户手动修改了客户端电脑时间&#xff0c;往前调整了一年&#xff0c;则软件就可以继续使用一年&…

【产品经理】订单处理4-拆单策略

上次讲解了订单的促销策略&#xff0c;本次讲解下订单处理过程中的拆单策略。 订单拆单策略分为自动拆单、手动拆单&#xff0c;拆单时机也分为订单未被审核前拆单、订单审核后因仓库/快递情况的拆单&#xff0c;本次主要讲解订单未被审核前拆单、订单审核后快递超重的拆单&am…

SQL注入-上篇

SQL注入 注入是web安全的头号大敌。注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的。攻击者把一些包含攻击代码当做命令或者查询语句发送给解释器&#xff0c;这些恶意数据可以欺骗解释器&#xff0c;从而执行计划外的命令或者未授权访问数据。注入漏洞通常能sq…

前端构建工具用得好,构建速度提升 10 倍

今天来盘点一下前端构建工具。 Turbopack Turbopack&#xff0c;由Vercel开源&#xff0c;是下一代高性能的JavaScript应用构建工具&#xff0c;目前用于 Next.js 中。Turbopack旨在通过革新JavaScript应用的打包流程来显著提升应用性能&#xff0c;它专注于缩短加载时间&…

分析线程池的构造过程,追踪核心成员变量

分析线程池的构造过程,追踪核心成员变量 1、背景2、核心参数3、这样设计的好处1、背景 上图是对线程池原理的一个详细的表达,它体现了线程池的几个核心概念,具体是哪些概念呢,让我们一起来探索。 2、核心参数 首先通过对Executors创建线程池的方法签名的分析,我们会发现…

简单一招实现计件工资的核算

现在很多工厂都采用计件工资的管理办法&#xff0c;这充分体现了多劳多得、按劳取酬的薪资分配原则&#xff0c;同时鼓励先进鞭策后进&#xff0c;奖勤罚懒&#xff0c;摒弃计时工资的“大锅饭”心态&#xff0c;提高了企业的整体运作效率。 计件工资的难题 但是在实际的操作中…