0

我尝试创建条形图,但输出只是条形图,我想像视觉均衡器一样上下移动条形图,但我不知道确切的代码。有人知道吗?

这是一张图片:

我的尝试:

#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <graphics.h>

void main(){
    int gd = DETECT, gm;
    initgraph(&gd,&gm, “D:\\TC\\BGI”);
    randomize();
    int x = 100;
    int y,a; 
    setfillstyle(2,GREEN);

    do{
        delay(100);
        y = random(150);
        if ((200-y) >=a){ 
            setfillstyle(2,BLACK);
            bar (x,200-y,x+20,a); 
        } 
        else { 
            bar (x,200,x+20,200-y); 
        }  
        a = 200-y; 
    }
    while(!kbhit());
    getch(); 
    closegraph(); 
}
4

1 回答 1

0

您应该在主循环中重复执行此操作:

  1. 计算条的位置

    您没有提供输入或输出的任何信息。混频器设备将更多信号混合在一起,均衡器是可调带通滤波器阵列。那么这些条形代表什么?

    如果它们是用于设置带通滤波器的滤波器GUI,那么您需要为它们添加接口,例如用鼠标或其他东西“移动”它们。为此,我们需要更多信息...

    如果条形图代表频谱图,那么您需要对随时间移动的某个输入信号窗口进行DFT 。

  2. 清除缓冲区

    这称为后缓冲或双缓冲。如果我没记错的话,华大基因可以做到这一点。这个想法是渲染到内存中以避免闪烁,当图像完成后将其复制到屏幕上。

  3. 渲染条以缓冲

    这部分你声称你已经实现了,所以不需要解释。

  4. 将缓冲区渲染到屏幕

    这是后退/双缓冲的最后一步,以避免闪烁

  5. 等待/睡眠一段时间

  6. 检测退出条件

    如果处于活动状态,则停止循环,否则再次转到#1 ...

如果要制作鼠标GUI,则需要添加鼠标事件处理程序。我认为在Borland Turbo C++中有一些库,但如果我弄错了,您可以INT 33h通过轮询定期扫描鼠标状态(这远非理想,但适用于初学者)或连接您自己的鼠标处理程序。

这里有一些相关的东西要阅读:

于 2017-07-27T06:30:05.550 回答