You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于基础putpixel函数配合graphics.h实现图形正方形裁剪

实现思路
  • 第一步:先定义裁剪正方形的参数
    先确定你要裁剪的正方形的位置和大小,比如我们要裁剪圆心附近的40x40正方形,就可以定义对应参数:
    // 裁剪正方形左上角坐标、边长、右下角坐标
    int crop_x1 = 30, crop_y1 = 30, crop_size = 40;
    int crop_x2 = crop_x1 + crop_size;
    int crop_y2 = crop_y1 + crop_size;
    
  • 第二步:选择裁剪实现方式
    第一种:绘制时直接过滤点(最符合作业要求,逻辑简单)
    只需要在你原有调用putpixel的逻辑前加一层坐标判断,只有像素点落在正方形区域内才绘制,修改后的完整代码如下:
    // 假设hesapla函数为计算点(x,y)到圆心距离的函数,即sqrt(x*x + y*y)
    void cember(){
      int r=50;
      const int width=r;
      const int length=r*1.5;
      // 新增裁剪区域参数
      int crop_x1 = 30, crop_y1 = 30, crop_size = 40;
      int crop_x2 = crop_x1 + crop_size;
      int crop_y2 = crop_y1 + crop_size;
      for(int y=width;y>= -width;y-=2){
        for(int x=-length;x<=length;x++){
            if ((int) hesapla(x,y)==r) {
                int draw_x = x+50;
                int draw_y = y+50;
                // 新增判断:坐标在裁剪区域内才绘制
                if(draw_x >= crop_x1 && draw_x <= crop_x2 && draw_y >= crop_y1 && draw_y <= crop_y2) {
                    putpixel(draw_x, draw_y, WHITE);
                }
            }
          }
          
      }
      getch();
    }
    
    第二种:先画完整圆再提取区域(适合需要保留完整圆、单独使用裁剪块的场景)
    用graphics.h原生提供的getimage和putimage函数实现,不需要修改原有绘制逻辑:
    void crop_circle() {
        // 先调用原有函数画完整圆
        cember();
        // 定义裁剪区域参数
        int crop_x1 = 30, crop_y1 = 30, crop_size = 40;
        int crop_x2 = crop_x1 + crop_size;
        int crop_y2 = crop_y1 + crop_size;
        // 申请存储图像的内存
        void *buf = malloc(imagesize(crop_x1, crop_y1, crop_x2, crop_y2));
        // 读取指定区域像素到内存
        getimage(crop_x1, crop_y1, crop_x2, crop_y2, buf);
        // 清屏后把裁剪的正方形区域放到屏幕左上角(0,0)位置展示
        cleardevice();
        putimage(0, 0, buf, COPY_PUT);
        // 释放内存
        free(buf);
        getch();
    }
    

注意:使用第二种方案时需要提前引入<stdlib.h>头文件,否则malloc和free函数会报错。

两种方案都没有用到circle函数,完全符合作业要求,你可以根据自己的需求选择对应的实现方式:如果只需要显示裁剪后的圆形部分,选第一种即可;如果需要先展示完整圆再展示裁剪块,选第二种。

内容的提问来源于stack exchange,提问作者Eonantiel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:08