精华内容
下载资源
问答
  • 使用OpenGL在电脑屏幕上绘图

    千次阅读 2019-05-08 13:38:33
    肯定也有人跟我一样想过:能不能不那个黑乎乎的窗口上绘图,而是直接绘制在电脑屏幕,就像桌面那些图标一样。我曾翻遍了所有的OpenGL函数,没有哪个函数支持这种做法。我想大概是不行的吧,就把屏幕上绘图的...

           学过OpenGL的人都知道,要想利用OpenGL函数进行绘图,就要创建一个显示窗口。每次绘图,第一件事恐怕就是创建窗口了。肯定也有人跟我一样想过:能不能不在那个黑乎乎的窗口上绘图,而是直接绘制在电脑屏幕上,就像桌面上那些图标一样。我曾翻遍了所有的OpenGL函数,没有哪个函数支持这种做法。我想大概是不行的吧,就把在屏幕上绘图的想法给搁置了。直到有一天,我学习了GDI,尝试进行截屏,当时在想,既然可以读取像素缓冲数据,那么肯定也可以设置像素缓冲,GDI和OpenGL绘图的原理不都是对窗口的像素缓冲进行写操作吗?于是我深入了解GDI、OpenGL、操作系统、窗口之间的关系,终于恍然大悟!OpenGL只提供绘图的方法,但不能创建窗口,创建窗口是操作系统的事。任何可见的界面,都是窗口,包括控制台窗口、应用软件界面、文本框、按钮、菜单栏。。。。当然还有最终极的窗口-----电脑屏幕。既然是窗口,那么他们都有共同的特征,就是都具有像素缓冲区,也就是说,可以进行绘图。在电脑屏幕上使用OpenGL绘图是可行的,关键是如何操作,下面就来说明一下如何在屏幕上绘图。

    一、创建OpenGL渲染环境(Render Context)

               要使用OpenGL 绘图,不仅需要有窗口,还需要有渲染环境。电脑屏幕就是窗口,它一直都在那里,因此不需要创建窗口,为窗口创建OpenGL渲染环境才是绘图的关键。在windows系统中,创建渲染环境需要用到几个win API函数,其操作步骤就是:获取窗口设备环境(DC,device context),选择像素格式,设置像素格式,创建渲染环境(RC,render context)。用到的win API和wgl函数如下:

    (1)获取窗口设备环境(DC),hWnd是窗口句柄,如果为NULL,则表示获取屏幕的DC。详见MSDN:GetDC

    HDC GetDC(HWND hWnd);

    (2)为指定的设备环境(DC)选择合适的像素格式,hdc参数是DC句柄,ppfd像素格式描述器。如果找到符合指定DC的像素格式,则返回像非零的素格式索引号,否则返回0。详见MSDN ChoosePixelFormat

    int ChoosePixelFormat(HDC  hdc, CONST PIXELFORMATDESCRIPTOR *  ppfd );

    像素格式描述器是一个结构体,其定义如下:

    /* Pixel format descriptor */
    typedef struct tagPIXELFORMATDESCRIPTOR
    {
        WORD  nSize;
        WORD  nVersion;
        DWORD dwFlags;
        BYTE  iPixelType;
        BYTE  cColorBits;
        BYTE  cRedBits;
        BYTE  cRedShift;
        BYTE  cGreenBits;
        BYTE  cGreenShift;
        BYTE  cBlueBits;
        BYTE  cBlueShift;
        BYTE  cAlphaBits;
        BYTE  cAlphaShift;
        BYTE  cAccumBits;
        BYTE  cAccumRedBits;
        BYTE  cAccumGreenBits;
        BYTE  cAccumBlueBits;
        BYTE  cAccumAlphaBits;
        BYTE  cDepthBits;
        BYTE  cStencilBits;
        BYTE  cAuxBuffers;
        BYTE  iLayerType;
        BYTE  bReserved;
        DWORD dwLayerMask;
        DWORD dwVisibleMask;
        DWORD dwDamageMask;
    } PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, FAR *LPPIXELFORMATDESCRIPTOR;

    像素书格式描述器中各成员的意义及取值范围,在网上或者微软的MSDN中都有详细的说明。

    (3)为指定的设备环境(DC)设置像素格式。第二个参数iPixelFormat通过ChoosePixelFormat函数获取。详见MSDN:SetPixelFormat

    BOOL SetPixelFormat(HDC  hdc,int  iPixelFormat,CONST PIXELFORMATDESCRIPTOR *  ppfd );

    (4)创建渲染环境(create render context)。创建OpenGL渲染环境需要用到一个wgl函数,该函数包含在gl\GL.h头文件中。详见MSDN:wglCreateContext

    HGLRC wglCreateContext(HDC  hdc);

    二、编程实例

                本程序实例是使用VS编写的。考虑到例子很简单,仅仅用到1.1版本的OpenGL函数,这里就不进行OpenGL编程环境配置,只是利用VS自带的OpenGL库。需要引用的头文件有两个,win API需要包含Windows.h,wgl函数和OpenGL函数需要包含gl\GL.h头文件。由于不需要创建窗口,创建工程可以是win32,为了方便,我采用了自己最熟悉的控制台工程。实例代码如下:

    #include<Windows.h>
    #include<gl\GL.h>
    
    int main()
    {
    	PIXELFORMATDESCRIPTOR pfd;
    	pfd.nSize = 40;
    	pfd.nVersion = 1;
        //支持绘制到窗口、支持OPENGL、支持GDI
    	pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_SUPPORT_GDI;
    	pfd.iPixelType = PFD_TYPE_RGBA;
    	pfd.cColorBits = 0;
    	pfd.cRedBits = 0;
    	pfd.cRedShift = 0;
    	pfd.cGreenBits = 0;
    	pfd.cGreenShift = 0;
    	pfd.cBlueBits = 0;
    	pfd.cBlueShift = 0;
    	pfd.cAlphaBits = 0;
    	pfd.cAlphaShift = 0;
    	pfd.cAccumBits = 0;
    	pfd.cAccumRedBits = 0;
    	pfd.cAccumGreenBits = 0;
    	pfd.cAccumBlueBits = 0;
    	pfd.cAccumAlphaBits = 0;
    	pfd.cDepthBits = 0;
    	pfd.cStencilBits = 0;
    	pfd.cAuxBuffers = 0;
    	pfd.iLayerType = PFD_MAIN_PLANE;
    	pfd.bReserved = 0;
    	pfd.dwLayerMask = 0;
    	pfd.dwVisibleMask = 0;
    	pfd.dwDamageMask = 0;
    	
        //获取屏幕的设备环境
    	HDC hdc = GetDC(NULL);
        //选择像素格式
    	int pixelFormat = ChoosePixelFormat(hdc, &pfd);
        //设置像素格式
    	SetPixelFormat(hdc, pixelFormat, &pfd);
        //创建OpenGL渲染环境
    	HGLRC hglrc = wglCreateContext(hdc);
    	//为当前线程指定设备环境和渲染环境
    	wglMakeCurrent(hdc, hglrc);
    	int i = 0;
    	while (i<1000)
    	{
    
    		i++;
    		glViewport(0, 0, 800, 800);
    		//glClear(GL_COLOR_BUFFER_BIT);
    		glColor3f(1.0f, 0.0f, 0.0f);
    		glBegin(GL_TRIANGLES);
    		glVertex2f(-0.5f, -0.5f);
    		glVertex2f(0.0f, 0.5f);
    		glVertex2f(0.5f, -0.5f);
    		glEnd();
    		glFlush();
    	}
    	return 0;
    }

    运行以上代码,可以看到屏幕上显示了一个红色的三角形:

    三 需要注意的事项

            1.设置像素格式时,其他的可以采用默认,全部设为0,但这一项一定要对pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_SUPPORT_GDI;要想绘图到屏幕,一定要选支持OpenGL和支持GDI,GDI和双缓冲是不相容的,因此选择了PFD_SUPPORT_GDI,就不能选PFD_DOUBLEBUFFER。换句话说,如果想要绘图在屏幕上,你就不能采用双缓冲。

           2.采用VS自带的OpenGL库时,一定要在项目属性的连接器中增加opengl32.lib附加依赖项,否则编译会出现连接错误“无法解析外部引用"之类的错误。

    展开全文
  • 任意画图,可以在电脑上任意界面画图画图工具齐全,可保存修改
  • VC 在电脑屏幕上绘图

    千次阅读 2014-06-17 13:46:49
    windows编程中,通常的绘图就是DC(设备下文),

    在windows编程中,通常的绘图就是DC(设备上下文),一般在应用程序中,我么一般绘制在对话框上显示给用户;


    有些时候,如果想在对屏幕上绘图,这么绘制呢?


    1: 一般在对话框上绘图:

           HDC hdc = GetDC(hwnd); 
            MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
            LineTo(hdc, ptPrevious.x = LOWORD(lParam), 
              ptPrevious.y = HIWORD(lParam)); 
            ReleaseDC(hwnd, hdc); 
    

    2:根据方法1,可以考虑在桌面上绘图的方法:


    HWND hwnd = ::GetDesktopWindow();

          HDC hdc = GetDC(hwnd); 
           //绘图;
            ReleaseDC(hwnd, hdc); 
    但是,却没有在屏幕上绘制的图像;


    解决方法:

    HDC GetDC( HWND hWnd // handle to window);  

    Parameters

    hWnd
    [in] Handle to the window whose DC is to be retrieved. If this value is NULL, GetDC retrieves the DC for the entire screen. 

    所以, 如果要在屏幕上绘图可以这样获取DC, HDC hdc = ::GetDC(0);

    展开全文
  • 解决mac电脑上spyder画图中文乱码的问题 网上搜了很多方法,需要将微软雅黑的字体下载下来放在指定的目录下,但是搜的字体好像不可以mac,后来发现mac只需要用自带的中文字体即可,程序前面加一句plt....

    解决在mac电脑上spyder画图中文乱码的问题

    在网上搜了很多方法,需要将微软雅黑的字体下载下来放在指定的目录下,但是搜的字体好像不可以在mac上,后来发现mac只需要用自带的中文字体即可,在程序前面加一句
    plt.rcParams[‘font.sans-serif’] = [‘Arial Unicode MS’]
    path="./"

    后面在用到中文的地方前面都加u

    展开全文
  • 一款专门在电脑屏幕上画图的实用工具,还可以屏幕写字。具有截屏功能,还可以把你喜爱的图片截下来保存。放大镜的效果也堪称一绝,更为绝的是还可以拍照和录像。倘若神笔手,快乐至尊。 《神笔》使用说明 1...
  • 原标题:还记得你家电脑上画图工具吗?它要消失了!QQ截图出现之前,大家是怎么来截取屏幕的呢?曾经是各位无法驾驭Photoshop的菜鸟神器,Windows系统上镜率第二高的附件工具(第一当然是记事本了)画图,现在要和...

    原标题:还记得你家电脑上的画图工具吗?它要消失了!

    在QQ截图出现之前,大家是怎么来截取屏幕的呢?曾经是各位无法驾驭Photoshop的菜鸟神器,Windows系统上镜率第二高的附件工具(第一当然是记事本了)画图,现在要和大家说再见了。微软打算在今年秋季的Windows 10创意更新里将这个已经有32年历史的绘画工具标记为“已移除的功能”,让Paint 3D接它的班。

    fe174c5f0d7a5e4e3b161ce35591721d.png

    画图的年纪和Windows一样长,在1985年发布的Windows 1.0里就已经带有这个工具,当时它只是ZSoft的授权软件复制,只支持黑白画面而且使用一个专门的MSP文件格式,随着Windows的版本更迭,画图也在几次功能升级之后获得了彩色绘画功能、BMP/JPG/GIF/PNG格式支持、缩放裁剪优化,以及最后的Ribbon UI重做。虽然在与时俱进,但微软最后还是决定让它退休,因为Windows 10的创作空间已经往3D扩张,传统的画图已经跟不上脚步。

    9a40f4cc6b9705ce2d6035cca35441cb.png

    虽然微软已经为它颁发了退休令,但画图何时离开岗位还尚不可知,微软暂时未公布从Windows 10里剔除画图程序的具体时间,不过从今年秋季更新起,就是Paint 3D的时代了。

    责任编辑:

    展开全文
  • 事实上电脑自带的画图工具画图教程呢,小编为大家整理了电脑画图工具哪里,希望能帮到你。电脑画图工具哪里工具/材料:电脑。第一步,打开电脑进入桌面,点击下方开始菜单。第二步,进入菜单后找到Windows附件...
  • 电脑画图欣赏 【电脑画图欣赏:1】 【电脑画图欣赏:2】 【电脑画图欣赏:3】 【电脑画图欣赏:4】 【电脑画图欣赏:5】看完了以上的电脑画图欣赏之后,下面就来了解一下关于版画的知识吧!...
  • Windows系统中有很多系统自带的非常实用的小工具,其中有一个画图工具,我们可以通过画图工具进行简单地图片处理,虽然功能不是很强大,但有时还是比较实用的。接下来系统城小编主要以Windowsxp系统为例,介绍...
  • Windows系统中有很多系统自带的非常实用的小工具,其中有一个画图工具,我们可以通过画图工具进行简单地图片处理,虽然功能不是很强大,但有时还是比较实用的。接下来 PConline 小编主要以 Windows xp系统 为例,...
  • 可以直接在电脑屏幕用简单的线条画图,非常适合在线课堂、培训、在线演示等地方使用。 软件简介: 西瓜画板屏幕画图板是一款针对显示屏幕进行画画的程序,可广泛使用在线课堂、培训、在线演示等地方,运行就保存...
  • 画图在系统里所在位置:win-所有程序-附件-画图win7自带画图工具主要功能1、放大镜功能:有时因为图片局部文字或者图像太小而看不清楚,这时,就可以利用画图中的“放大镜”工具,放大图片的某一部分,方便查看。...
  • 电脑打开画图快捷键

    千次阅读 2020-02-27 10:22:23
    第一步:window+r,调出运行窗口。 第二步:输入mspaint,回车确认。(注:mspaint是microsoft paint的简写,意思是“微软画图”) 第三步:windows自带的画图功能就打开了。 ...
  • 电脑中的“画图工具”哪里?画图工具windows菜单中,可以通过“运行”来打开,具体打开方式如下:打开windows,桌面下方的任务栏中找到搜索框,点击搜索框。搜索框中输入“运行”点击“运行”,并界面中...
  • 画图软件轻松画画,教学深入浅出计算机画图教案授课时间: 2010年3月25日 授课教师:刘玉伟 授课内容: 用计算机画图(第一...4、通过运用画图软件绘制小鸡 各部分的操作方法教学重点:绘图软件的操作与应用教学难...
  • 画图软件简单来说就是画图的工具,我们...有些想要学习绘画的朋友就想使用电脑自带的画图软件来练手,但是不知哪找到。对此,小编给大家整理了打开画图软件的三种方式,一起来看看吧1、点击桌面开始按钮,搜索...
  • 电脑画图工具快捷键设置方法.其他电脑的设置方法相同。
  • VC调用matlab2012画图的的程序怎么他人电脑上执行不成功啊, 1.电脑上没装matlab2012,执行失败。 2.电脑上装了matlab2012,执行没反应。 仅仅自己电脑上成功。 难道matlab版本太高?各位做过类似的程序有...
  • 下面小编就来推荐几款电脑绘图软件,小伙伴们可不要错过了。1.sai绘图软件sai绘图软件是一款功能非常强大的绘画软件,不仅可以任意角度旋转画布,作画时也可随时旋转画布,还可对画、锚点、笔压效果进行编辑!另外,...
  • CNCKAD数控冲床,机器为信宜华辉数控L3冲床。冲床电脑系统为FANUC SERIES OI -PC
  • 计算机画图教案授课时间: 2013年4月26日 授课教师:李平授课内容: 用计算机画图(第一课时)教学...教学重点:绘图软件的操作与应用教学难点:曲线工具的运用教学准备:计算机 教学过程 一、新课导入画图软件是win...
  • 其实加字的话是很简单的,每个电脑都可以,不需要下载什么特殊软件电脑自带的画图工具就可以轻松加字 首先找到一张图片右击编辑——打开图片 然后我们点左边工具栏的A标志(这个就是加字的按钮) 点了之后我们用...
  • 奇奕画王电脑版是一款好用的电脑画图软件,软件提供了丰富实用的工具,可以满足不同用户的绘图需求,它为使用者提供了画笔工具、倒色工具、区域选择、操作工具、图形模板、文字工具、仙女袋以及效果工具等内容,而且...
  • 使用电脑的时候,如果我们要进行截图操作,很多人都会选择使用自己通讯软件的截图功能,比如说QQ或者是微信等等,或者是电脑自带截图工具。但是,如果电脑出现一些问题,无法使用以上方法截图的时候,应该怎么办呢...
  • 今天,简单讲讲android里如何windows使用画图软件输入文字。最近,因为换了租房的位置,导致自己的状态很不好,所以这几天没有写关于android代码的内容。主要也是自己现在写不好,所以先写写之前就想写的...
  • Mac技巧之苹果电脑Mac OS X系统,类似Windows画图板的软件paintbrush介绍与下载 PC用户可能经常用Windows自带的画图板做简单的图片处理,苹果电脑Mac OS X系统的预览只能简单添加些注释什么的;iPhoto重在图片...
  • 1、启动程序1)单击“开始-所有程序-附件-画图”,这样就打开了画图窗口2)窗口中,上边是...2、绘图操作1)工具箱里头选择油漆桶工具,选择颜色2,颜料盒中点选蓝色,然后中间白纸点一下右键(注意是右键),...
  • 电脑画图软件内如何绘制向左的箭头腾讯视频/爱奇艺/优酷/外卖 充值4折起当我们使用电脑的时候,可以通过电脑自带的绘图软件来进行绘画,那么如何在画图软件内绘制一个向左的箭头呢?接下来就由小编来告诉大家。...
  • Mac技巧之苹果电脑Mac OS X系统,类似Windows画图板的软件paintbrush介绍与下载 PC用户可能经常用Windows自带的画图板做简单的图片处理,苹果电脑Mac OS X系统的预览只能简单添加些注释什么的;iPhoto重在图片...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,098
精华内容 17,639
关键字:

如何在电脑上绘图