Threenewbeer 2023-04-08 21:48 采纳率: 0%
浏览 42

有什么函数能替代SetPixel?

我在c++上用SetPixel做了一个程序:
先声明一个三维数组screen[x][y][3]=0,并用这个数组和SetPixel做了一个在控制台上输出数组对应颜色的程序。但SetPixel效率太低,我想做到像视频一样一帧一帧播放的效果
求解决方案!

  • 写回答

3条回答 默认 最新

  • H3T 2023-04-08 22:06
    关注

    用图形库OpenGL 或 DirectX来实现吧。
    SetPixe函数用的是软件渲染,效率比较低。

    示例:

    #include <GL/glew.h>
    #include <GL/freeglut.h>
    
    int screen[800][600][3] = {}; // 三维数组,保存每个像素的颜色值
    
    void display()
    {
        glClear(GL_COLOR_BUFFER_BIT); // 清空窗口
    
        glBegin(GL_POINTS); // 开始绘制点
    
        for (int x = 0; x < 800; x++)
        {
            for (int y = 0; y < 600; y++)
            {
                glColor3ub(screen[x][y][0], screen[x][y][1], screen[x][y][2]); // 设置点的颜色
                glVertex2i(x, y); // 设置点的坐标
            }
        }
    
        glEnd(); // 结束绘制点
    
        glFlush(); // 刷新窗口
    }
    
    int main(int argc, char** argv)
    {
        glutInit(&argc, argv); // 初始化OpenGL库和窗口系统
    
        glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置窗口显示模式
    
        glutInitWindowSize(800, 600); // 设置窗口大小
    
        glutCreateWindow("My Screen"); // 创建窗口
    
        glMatrixMode(GL_PROJECTION); // 设置投影矩阵
        glLoadIdentity();
        glOrtho(0, 800, 0, 600, -1, 1);
    
        glMatrixMode(GL_MODELVIEW); // 设置模型视图矩阵
        glLoadIdentity();
    
        glutDisplayFunc(display); // 注册窗口显示回调函数
    
        glutMainLoop(); // 进入事件循环
    
        return 0;
    }
    

     
    如果答案对您有所帮助,望采纳。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月8日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络