我在c++上用SetPixel做了一个程序:
先声明一个三维数组screen[x][y][3]=0,并用这个数组和SetPixel做了一个在控制台上输出数组对应颜色的程序。但SetPixel效率太低,我想做到像视频一样一帧一帧播放的效果
求解决方案!
用图形库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;
}
如果答案对您有所帮助,望采纳。
视频那个是视频加速的,用的是Direct2D API
不知道你这个问题是否已经解决, 如果还没有解决的话: