C# 通过 OpenTK 在窗体上显示一张图片_c# opentk_laocooon523857886的博客-程序员秘密

技术标签: C#  算法  

using System;
using System.Collections.Generic;
using System.Text;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using OpenTK.Graphics;
using OpenTK.Input;
using System.Threading;
using System.Drawing;
using System.Drawing.Imaging;
using GlPixelFormat = OpenTK.Graphics.OpenGL.PixelFormat;
using SysPixelFormat = System.Drawing.Imaging.PixelFormat;
using System.IO;

namespace OpenTK建立一个窗体
{
    internal class Game : GameWindow
    {
        private Bitmap _bitmap = Image.FromFile(Directory.GetCurrentDirectory() + "\\logo.jpg") as Bitmap; 
        private int _texture;

        private string windowTitle="";
        private int frames = 0;

        public Game(int with, int height, string title)
            : base(with, height, GraphicsMode.Default, title)
        {
        }

        protected override void OnLoad(EventArgs e)
        {
            GL.ClearColor(Color.MidnightBlue);
            //GL.Enable(EnableCap.DepthTest);

            GL.Enable(EnableCap.Texture2D);
            GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);

            GL.GenTextures(1, out _texture);
            GL.BindTexture(TextureTarget.Texture2D, _texture);

            BitmapData bitmapData = _bitmap.LockBits(
                new Rectangle(0, 0, _bitmap.Width, _bitmap.Height),
                ImageLockMode.ReadOnly,
                SysPixelFormat.Format32bppArgb
            );

            GL.TexImage2D(
                TextureTarget.Texture2D,
                0,
                PixelInternalFormat.Rgba,
                bitmapData.Width,
                bitmapData.Height,
                0,
                GlPixelFormat.Bgra,
                PixelType.UnsignedByte,
                bitmapData.Scan0
            );

            _bitmap.UnlockBits(bitmapData);

            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMinFilter.Linear);
        }
        protected override void OnUnload(EventArgs e)
        {
            //base.OnUnload(e);
            GL.DeleteTextures(1, ref _texture);
        }
        protected override void OnUpdateFrame(FrameEventArgs e)
        {
            base.OnUpdateFrame(e);

            KeyboardState input = Keyboard.GetState();
            if (input.IsKeyDown(Key.Escape))
            {
                Exit();
            }
            Title = $"{windowTitle} - FPS: {RenderFrequency:0.0} - Frames: {frames}";

        }
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            frames++;

            GL.Clear(ClearBufferMask.ColorBufferBit);

            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();
            GL.BindTexture(TextureTarget.Texture2D, _texture);

            GL.Begin(PrimitiveType.Quads);

            GL.TexCoord2(0.0f, 1.0f);
            GL.Vertex2(-0.6f, -0.4f);
            GL.TexCoord2(1.0f, 1.0f);
            GL.Vertex2(0.6f, -0.4f);
            GL.TexCoord2(1.0f, 0.0f);
            GL.Vertex2(0.6f, 0.4f);
            GL.TexCoord2(0.0f, 0.0f);
            GL.Vertex2(-0.6f, 0.4f);

            GL.End();

            SwapBuffers();

        }
        
    }
}



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/laocooon/article/details/123048931

智能推荐

贝尔宾团队角色理论及实践_小肃先生的博客-程序员秘密

一、什么是贝尔宾团队角色理论贝尔宾团队角色(Belbin Team Roles),亦被称为贝尔宾团队角色表(Belbin Team Inventory)剑桥产业培训研究部前主任贝尔宾博士和他的同事们经过多年在澳洲和英国的研究与实践,提出了著名的贝尔宾团队角色理论,即一支结构合理的团队应该由八种角色组成,后来修订为九种角色。贝尔宾团队角色理论是,高效的团队工作有赖于默契协作。团队成员必须清楚其他人所扮

CSAPP Lab2 实验记录 ---- Bomb Lab(Phase 1 - Phase 6详细解答 + Secret Phase彩蛋解析)_bomblab所有答案总结_Love 6的博客-程序员秘密

前引今天是除夕 然后平时摸着摸着鱼 把CSAPP前三章看完了(浮点那里跳着看完的)因为学习第三章之前学过大部分王爽的汇编语言(就是因为要学CSAPP才学的汇编)然后看第三章相对第一遍初略看的时候 简直不要太舒服 就至少能看懂 能做大部分CSAPP例题了 刚开始没学汇编的时候 里面是啥我都不知道 也就导致我第一次看第三章的时候 懵懵懂懂 不知所以 也就啥都没学进去~聊点其他的题外话吧 反正寒假说学的有多认真 倒也不一定 感觉还是边耍边学的吧 Leetcode今天也还没有刷题 晚上也要玩游戏 打ow

ChinaVIS 2018挑战赛1获奖作品总结_T Lai的博客-程序员秘密

此总结所采用的文章为东北师范大学-徐劭斌挑战赛获奖答卷。首先,我们来看一下挑战赛1的题目描述:HighTech是一家互联网高科技公司,有几百名员工,分属财务、人力资源和研发三个部门。公司正在全力研发一款重量级新产品,近期该产品临近发布,公司对内部发生的一切异常现象都非常敏感。为了维护公司的核心利益,确保新产品顺利发布,公司高层决定临时成立内部威胁情报分析小组,该小组将根据公司内部采集到的数...

【React】antdpro开发指南_antd pro_业火之理的博客-程序员秘密

前言后台管理系统用的非常多,如果比较复杂点的后台可能会多人开发,这时候可能导致各种样式不统一之类的问题。antdpro用起来有一定学习成本,所以需要梳理一下。快速上手npx create-umi your-project选择最新v5,antd4启动npm run start即可看见页面。登录页默认用户名密码是admin ant.design 。输入进去即可进入后台。进入后右下角有个米饭一样的图标,那个就是umi-ui,可以非常方便的导入代码或者模板进行修改。注意

两个git库之间迁移_详解git仓库迁移的两种解决方案_weixin_39616798的博客-程序员秘密

Git仓库迁移而不丢失log的方法要求能保留原先的commit记录,应该如何迁移呢?同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢?注意:如果使用了代码审核工具Gerrit,那么在进行操作之前需要将Gerrit关掉,等成功恢复后再将Gerrit开户即可1、使用git push --mirror先了解一些git的基本参数介绍git clone --bareGIT-CLONE(1...

随便推点

Python3 numpy,pandas,DataFrame基本操作_pandas计算出每个学生的总成绩_CFF_伊人的博客-程序员秘密

本文以学生成绩表为例,做几道简单的题。题目(1):求出每名同学的总成绩 按总成绩排序 重置排序后的索引 按性别进行分组分析 按总分进行分组统计,300分以下,300-400,400分以上代码:1.求出每名同学的总成绩import pandas as pdimport numpy as npstu_score=pd.read_excel ('./data/stu_s...

Delphi中动态调用DLL的方法_weixin_30784141的博客-程序员秘密

Delphi中动态调用dll的方法如下:function CallFunc(dllname, funcname: string; const param: array of const): DWORD;var hLib: THandle; pFunc: Pointer; intSize: Integer;begin Re...

机器学习之线性回归_线性回归机器学习_小磊要努力哟的博客-程序员秘密

文章目录一、线性回归1、普通线性回归(Linear Regression)2、岭回归(Ridge Regression)3、套索回归(lasso回归)二、python实战0、导包 数据说明1、线性回归2、岭回归3、Lasso回归一、线性回归1、普通线性回归(Linear Regression)线性回归是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都是一次方);只有一个自变量的情况称为一元

Kubernetes 核心原理及实战中使用方法_ChenKai_164的博客-程序员秘密

认识 kubernetes 架构及应用场景kubernetes(k8s) 在企业中的应用场景构建自动化运维平台(1) 中小型企业,使用 k8s 构建一套自动化运维平台(降本增效)(2) 大型互联网公司更要使用,实现更高效的运作方式充分利用服务器资源服务无缝衔接服务部署模式变迁&服务部署模式变化的思考云架构 & 云原生kubernetes 架构原理深入认识 kubernetes 核心组件原理kubernetes 的服务的注册与发现...

android屏幕分辨率适配_blueangle17的博客-程序员秘密

不同分辨率下容易出现的问题       由于目前android设备的分辨率种类很多,在开发的时候不注意进行屏幕适配的话会出现很多问题。比如高分辨率和低分辨率下的图片显示问题,在高分辨率下显示低分辨率图片显示质量下降。还有屏幕长宽比不同的情况下会出现布局移位,甚至是整个页面错乱的情况。还有字体设置,在不同分辨率下使用同一字体可能会导致字体显示大小不一的情况。以上问题,有的可以通过

Tensorflow 错误记录(持续更新...)_celina0321的博客-程序员秘密

1. 使用tf.cond/tf.case:报错:TypeError: true_fn must be callable.解决: tf.cond(a < b, f1, f2) -> tf.cond(a < b, lambda : f1, lambda: f2) ...

推荐文章

热门文章

相关标签