精华内容
下载资源
问答
  • 图形码动态生成及验证

    千次阅读 2009-10-29 21:27:00
     思路:图形码需要动态生成且看清楚时需要重新生成,所以可能采用整个登录页面来刷新完成,所以将验证码图片的生成放入另一个页面去做。 所谓图形码,通常是动态生成的一个验证码,并以图形的形式显示出来,...

        目标:在用户注册或登录时,为了进一步保片安全性,越来越多的网站开始采用动态生成图形码或者附加码进行验证。

     

        思路:图形码需要动态生成且看不清楚时需要重新生成,所以不可能采用整个登录页面来刷新完成,所以将验证码图片的生成放入另一个页面去做。

       

        所谓图形码,通常是动态生成的一个验证码,并以图形的形式显示出来,要求用户在一定时间内输入与图形中显示内容一致的信息。由于设定的很短的时间之后图形码会重新动态生成,因此要求用户必须在限定时间内进行输入验证。这样可以从时效和显示两方面进行安全性保证。

       

    前台代码:

     

    <table id="tab_Vilidate" runat="server" cellpadding="0" cellspacing="0" style="margin0;

                                                height100%width100%" visible="false">

                                                <tr>

                                                    <td class="tdMod" style="font-size14pxcolorRedfont-weightbolder" align="right">

                                                        验证码:

                                                    </td>

                                                    <td style="width160px;" align="left">

                                                        <input type="text" id="txt_Vcode" runat="server" class="txt_Style" />

                                                    </td>

                                                </tr>

                                                <tr>

                                                    <td>

                                                    </td>

                                                    <td align="left">

                                                        <img src="ValidatePage.aspx?

                                        ImgWidth=72&ImgHeight=22&Fineness=95&CodeLen=4&FontName=Times New Roman&FontSize=13&FontStyle=3&PosX=4&PosY=0"

                                                            alt="图像无法显示" id="SaveCode" onclick="javascript:reloadcode();" style="bordersolid 1px white"

                                                            onmouseover="this.style.cursor='hand'; " />

                                                        <span id="span_Time" style="colorRed"></span>

                                                    </td>

                                                </tr>

                                                <tr>

                                                    <td>

                                                    </td>

                                                    <td align="left">

                                                        <a href="javascript:reloadcode()" title="刷新验证码">更换一张图片</a>

                                                    </td>

                                                </tr>

    </table>

     

    验证码的引用地方:

    <img src="ValidatePage.aspx? ImgWidth=72&ImgHeight=22&Fineness=95&CodeLen=4&FontName=Times New Roman&FontSize=13&FontStyle=3&PosX=4&

    PosY=0" alt="图像无法显示" id="SaveCode" onclick="javascript:reloadcode();" style="bordersolid 1px white"

     

                                                            onmouseover="this.style.cursor='hand'; " />

     

    可以看到,在输入框右边增加一个图形元素,这个图形元素由ValidatePage.aspx页面动态生成和检验,并且在地址后面增加了很多的参数,这些就是图形码生成所需要的图片高度、宽度、清晰度等。那么ValidatePage.aspx中包含了怎样的处理代码呢?

     

    首先在ValidatePage.aspx页面的Page_Load处理函数中包含了这样的代码:

     

            //获取Request参数

            // 获取图片宽度

            if (Request["ImgWidth"] != null)

            {

                try

                {

                    this.m_imgWidth = Int32.Parse(Request["ImgWidth"]);

                    if (this.m_imgWidth < 16 || this.m_imgWidth > 480)

                        throw new Exception("图像宽度必须在16480之间");

                }

                catch (Exception Ex)

                { throw; }

            }

    其它获取参数的代码从略。

    接下来代码:

     

            // 生成随机验证码

            string ValidateCode = CreateValidateCode();

     

            // 生成Bitmap图像

            Bitmap bitmap = new Bitmap(this.m_imgWidth, this.m_imgHeight);

     

            // 给图像设置干扰

            DisturbBitmap(bitmap);

     

            // 绘制验证码图像

            DrawValidateCode(bitmap, ValidateCode);

     

            // Session保存验证码

            Session["ValidateCode"] = ValidateCode;

     

            // 保存验证码图像,等待输出

            bitmap.Save(Response.OutputStream, ImageFormat.Gif);

    可以看到,上面的图形元素中通过Request 对象将图形码生成所需要的参数读取过来。然后生成随面验证码,再产生一个Bitmap图像,并设置图像干扰效果,接下来将验证码写入到这个Bitmap图像中,并保存输出到Response 对象,这样就可以显示在注册输入页面了,到此便生成了图形码,但为了进行图形码验证,实际生成的验证码被保存在Session对象中,以便跨页面进行比对(即与验证码文本输入框的值进行比对)

     

    验证码比对验证过程

    // 先判断验证码是否有效,然后再判断用户名与密码是否正确

                if (this.txt_Vcode.Value == "" || this.txt_Vcode.Value.ToUpper().Trim() != (string)Session["ValidateCode"].ToString())

                {

                    

                    ClientScript.RegisterStartupScript(Page.GetType(), """<script>alert('验证码无效')</script>");

     

                }

     

     

    下面是相应的函数功能实现:

        // 生成随机验证码

        private string CreateValidateCode()

        {

            string ValidateCode = "";

            Random random = new Random();

            for (int i = 0; i < this.m_codeLen; i++)

            {

                int n = random.Next(26);

                ValidateCode += (char)(n + 65);

            }

            return ValidateCode;

        }

     

        // 干扰图像

        private void DisturbBitmap(Bitmap bitmap)

        {

            Random random = new Random();

            for (int i = 0; i < bitmap.Width; i++)

                for (int j = 0; j < bitmap.Height; j++)

                {

                    if (random.Next(100) < this.m_imgFineness)

                        bitmap.SetPixel(i, j, Color.LightBlue);

                }

        }

     

        // 画出验证码图像

        private void DrawValidateCode(Bitmap bitmap, string ValidateCode)

        {

            Graphics g = Graphics.FromImage(bitmap);

            Font font = new Font(this.m_fontName, this.m_fontSize, (FontStyle)(Enum.Parse(typeof(FontStyle), this.m_fontStyle, false)));

            g.DrawString(ValidateCode, font, Brushes.Black, m_posX, m_posY);

        }

     

    这里的验证码生成函数是引用了随机函数,并将生成结果转换为大写字母,这样,图形码将不区分大小写。这个图形码生成算法,可以根据个人爱好自己编写。

     

     

    扩展功能:登录界面更换生成验证码

     

    看到前台代码中有这一段:

     

    <a href="javascript:reloadcode()" title="刷新验证码">更换一张图片</a>

     

    调用了reloadcode()这个函数来重新加载图形验证码,这个无非是等于重新刷新Validate.aspx这个页面而已,这个页面的刷新并不会影响到登录页面刷新,故称为动态加载。

     

        <%--图形码的动态加载--%>

        <script type="text/javascript">

     

        var timeMax=6; // 图形码可见时间最大值

        var timeCnt=0; // 记数

        

        // 当出现验证码验证时触发此函数开始记时

        function CreateListen()

        {

            var intervalId=setInterval(SetTime,1000);

        }

        

        // 判断时间如果在设置的最大时间之后将自动切换图形码

        function SetTime()

        {

            timeCnt+=1;

            

            // 显示当前图形码可用时间

            document.getElementById("span_Time").innerText=timeMax-timeCnt+"";

            if(timeCnt>=timeMax)

            {

                // 超过可用时间的最大值则更换图形码

                reloadcode();

                timeCnt=0;

            }

     

        }

     

        // 动态生成图形验证码

        function reloadcode()

        {

            document.getElementById("SaveCode").src="ValidatePage.aspx?"+Math.random()+"ImgWidth=72&ImgHeight=22&Fineness=95&CodeLen=4&FontName=Times New Roman&FontSize=13&FontStyle=3&PosX=4&PosY=0";                                      

        }

        </script>

     

     

     扩展功能:设置N秒后,动态更换验证码(即保证验证码的时效性,N可设置)

     

     上面的<script>中的功能函数中已包含这段代码了

     

    function CreateListen():开始记时,这个函数是后台执行用户验证后出错次数达到一定次数后出现验证码的时候触发该函数做记时。即检测当前验证码的可用时间。

     

    后台触发该函数的代码:

    his.tab_Vilidate.Visible = true;

                        ClientScript.RegisterStartupScript(Page.GetType(), """<script>alert('用户名与密码输错" + i_ErrorCnt.ToString() + "次,请输入验证码');CreateListen();</script>");

                        i_Cnt = 0;

     

    这里利用后台注册前台js脚本的方法来调用CreateListen函数。关于后台注册前台js脚本我会在另一篇文章详细讲述它们的方法及注意点。

     

    总结一下:今天学习了图形验证码的动态生成、更换验证码、即指定时间内更换验证码等功能。

    展开全文
  • lcd12864图形显示讲解

    千次阅读 2020-02-07 17:16:18
    本文章将带您详细讲解 本型号lcd12864图形显示方法 ,在我之前的探索里,也查阅了很多技术手册和CSDN论坛的博客,但是发现这些文章并能帮助一个小白成功的使用图形显示,故写了这么一篇文章。若有理解或写的不对...

    LCD12864(带字库 ST7920型号)图形显示方法

    本文章将带您详细讲解 本型号lcd12864图形显示方法 ,在我之前的探索里,也查阅了很多技术手册和CSDN论坛的博客,但是发现这些文章并不能帮助一个小白成功的使用图形显示,故写了这么一篇文章。若有不理解或写的不对的地方,欢迎指正。
    本次讲解的lcd12864采用8位并口通讯,与串口通讯的不同处在于引脚和时序。

    首先我们还是要先了解一下最基本的一些函数。不做过多讲解

    lcd12864的引脚连接在这里插入图片描述

    命令集

    在这里插入图片描述
    在这里插入图片描述

    写时序

    在这里插入图片描述
    写命令在这里插入图片描述ReadStatusLCD();是对硬件的忙检测。就是通过读函数,读Busy位,直到Busy位为0,才开始进行操作。在下文会有介绍
    写数据
    在这里插入图片描述

    读时序

    在这里插入图片描述
    读状态
    在这里插入图片描述

    读状态的命令
    在这里插入图片描述

    lcd12864的初始化

    在这里插入图片描述

    lcd12864的图形化显示

    在这里插入图片描述
    上图中的步骤有个错误,应先输入Y坐标再输入X坐标。
    此款lcd12864的图形显示的坐标是这样的。
    在这里插入图片描述
    其中屏幕被x坐标分为上下两个半屏,即x为0-7是为上半屏,x为8-15时为下半屏。最重要的一点是,根据扩充指令的设定绘图RAM地址可知,x,y的起始地址为0x80,图中的地址是其偏移量。即图中的(0,0)在地址上是(0x80,0x80)。并且指向一个单位地址的数据是2个8位数据。假设对x=0x80,y=0x80的地址写数据,操作的像素点是左上角从左往右的16个点(对应数据的高位——>低位)

    加上代码演示

    在这里插入图片描述

    展开全文
  • 今天登陆树莓派的时候突然要求输入登陆密码,由于是从前任同事手中接到这块板子所以知道密码是什么,默认的密码raspberry也不对,无奈之下只能进行重置密码。 重置密码的具体方法如下: 1,将板子上的sd卡取下来连...

    今天登陆树莓派的时候突然要求输入登陆密码,由于是从前任同事手中接到这块板子所以不知道密码是什么,默认的密码raspberry也不对,无奈之下只能进行重置密码。
    重置密码的具体方法如下:
    1,将板子上的sd卡取下来连入读卡器使用电脑打开
    2,找到cmdline.txt文件,在文件同一行文字的末尾添加

    init=/bin/sh
    

    3,将sd卡重新放入板子里,此时启动树莓派时会进入命令行页面,输入

    mount -o remount, rw /
    
    passwd pi
    

    按照提示输入两遍要重设的密码,成功后会提示password updated successfully
    4,拔出sd卡连到电脑上将第二部输入的代码去掉保存,再将sd卡归位就好

    然而不幸的是当我在图形界面输入正确的密码后,树莓派并没有顺利进入系统图形界面而是在登陆界面无限循环
    谷歌了一大堆方法包括使用root用户登陆都不管用,最后重装了图形界面系统才成功
    重装系统方法如下
    1,打开树莓派进入登陆界面后CTRL+alt+f6进入命令行
    2,更新apt

    sudo apt-get update
    
    sudo apt-get upgrade
    
    sudo apt-get dist-upgrade
    

    3, 安装GUI

    sudo apt-get install --no-install-recommends xserver-xorg
    
    sudo apt-get install --no-install-recommends xinit
    
    sudo apt-get install raspberrypi-ui-mods
    
    sudo apt-get install --no-install-recommends raspberrypi-ui-mods lxsession
    

    参考文章:https://www.raspberrypi.org/forums/viewtopic.php?t=133691
    安装完成后系统会重启然后就可以进入GUI啦

    展开全文
  • 对于非GPU绘图的应用,通过这个类去获取图形内存(dequeueBuffer),并在绘制完成之后送还(queueBuffer),让显示系统在合适的时机显示。 对于GPU绘图(严格来说,是使用EGL标准)的应用,在创建OpenGL上下文时将...

    Android之窗口系统

    要点

    1.Android窗口系统通过C-S架构和一套Buffer循环机制实现,在保证安全稳定的前提下基本上做到了极致性能(无大块内存拷贝,IPC通信内容最少)。
    2.SurfaceFlinger创建Layer,将其中的BufferQueueProducer作为IGraphicBufferProducer传给应用侧的Surface,因而构成窗口。
    3.Surface是皮,BufferQueue是肉,通过这样的皮肉关系构建了Buffer循环机制。Buffer循环机制不仅用于窗口系统,也用于视频播放解码流,相机拍照数据流等(Camera2.0架构)。

    注:代码基于Android 5.0

    窗口系统接口

    作为一个应用,绘图是自由的,基本上也是平台无关的。但如果要把绘图的结果显示出来,就必须依赖平台提供的窗口系统。好比我们写篇文章出来容易,要投到杂志上发表,就必须按杂志社的格式,并通过审校等一堆流程,不然每个人都随便发,肯定乱套了。

    Android的窗口系统设计

    窗口类型
    Android为应用层提供的窗口接口为ANativeWindow。这个接口可用来调整配置参数,获取图形内存并送还触发显示。应用层是Buffer的生产者。
    对于非GPU绘图的应用,通过这个类去获取图形内存(dequeueBuffer),并在绘制完成之后送还(queueBuffer),让显示系统在合适的时机显示。
    对于GPU绘图(严格来说,是使用EGL标准)的应用,在创建OpenGL上下文时将ANativeWindow的指针传入,GPU的驱动会在合适的时候完成获取内存和送还的操作。应用层只需要调用eglSwapBuffers换缓存即可。

    Android的Windows接口

    对应用层开放的windows接口定义在
    system/core/include/system/windows.h
    主要接口函数如下:

    struct ANativeWindow
    {
        /*......*/
        int     (*setSwapInterval)(struct ANativeWindow* window, int interval);//设置Buffer失效期限,当应用生产Buffer快于消费者(一般是显示系统)的消费时,这个参数决定是否丢弃之前没来得及消费的Buffer。
        int     (*query)(const struct ANativeWindow* window, int what, int* value);//查询参数
        int     (*perform)(struct ANativeWindow* window,int operation, ... );//设置参数,其中也包括做连接
        int     (*dequeueBuffer)(struct ANativeWindow* window, struct ANativeWindowBuffer** buffer, int* fenceFd);//从队列中取出一块Buffer用于生产(一般是图形渲染),若是第一次调用,会触发Buffer的申请
        int     (*queueBuffer)(struct ANativeWindow* window, struct ANativeWindowBuffer* buffer, int fenceFd);//将生产完成的Buffer送还
        int     (*cancelBuffer)(struct ANativeWindow* window,  struct ANativeWindowBuffer* buffer, int fenceFd);//释放Buffer队列中的Buffer,一般是disconnect时调用
    };

    用于perform和query接口的一些宏定义如下:

    /*用于perform和query接口的宏*/
    enum {
        NATIVE_WINDOW_SET_USAGE                 =  0,
        NATIVE_WINDOW_CONNECT                   =  1,   /* deprecated */
        NATIVE_WINDOW_DISCONNECT                =  2,   /* deprecated */
        NATIVE_WINDOW_SET_CROP                  =  3,   /* private */
        NATIVE_WINDOW_SET_BUFFER_COUNT          =  4,
        NATIVE_WINDOW_SET_BUFFERS_GEOMETRY      =  5,   /* deprecated */
        NATIVE_WINDOW_SET_BUFFERS_TRANSFORM     =  6,
        NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP     =  7,
        NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS    =  8,
        NATIVE_WINDOW_SET_BUFFERS_FORMAT        =  9,
        NATIVE_WINDOW_SET_SCALING_MODE          = 10,   /* private */
        NATIVE_WINDOW_LOCK                      = 11,   /* private */
        NATIVE_WINDOW_UNLOCK_AND_POST           = 12,   /* private */
        NATIVE_WINDOW_API_CONNECT               = 13,   /* private */
        NATIVE_WINDOW_API_DISCONNECT            = 14,   /* private */
        NATIVE_WINDOW_SET_BUFFERS_USER_DIMENSIONS = 15, /* private */
        NATIVE_WINDOW_SET_POST_TRANSFORM_CROP   = 16,   /* private */
        NATIVE_WINDOW_SET_BUFFERS_STICKY_TRANSFORM = 17,/* private */
        NATIVE_WINDOW_SET_SIDEBAND_STREAM       = 18,
        NATIVE_WINDOW_SET_BUFFERS_DATASPACE     = 19
    };

    窗口的创建与使用

    Surface

    自Android 4.2之后,FramebufferNativeWindow被废弃,所有窗口均继承Surface。Surface本身是一种ANativeWindow。

    class Surface
        : public ANativeObjectBase<ANativeWindow, Surface, RefBase>/*Surface继承于ANativeWindow*/
    {
    public:
        Surface(const sp<IGraphicBufferProducer>& bufferProducer, bool controlledByApp = false);
        /*......*/
    private:
        // ANativeWindow hooks
        /*这几个hook函数对应于 window.h 中的接口函数*/
        static int hook_cancelBuffer(ANativeWindow* window,
                ANativeWindowBuffer* buffer, int fenceFd);
        static int hook_dequeueBuffer(ANativeWindow* window,
                ANativeWindowBuffer** buffer, int* fenceFd);
        static int hook_perform(ANativeWindow* window, int operation, ...);
        static int hook_query(const ANativeWindow* window, int what, int* value);
        static int hook_queueBuffer(ANativeWindow* window,
                ANativeWindowBuffer* buffer, int fenceFd);
        static int hook_setSwapInterval(ANativeWindow* window, int interval);
    
        static int hook_cancelBuffer_DEPRECATED(ANativeWindow* window,
                ANativeWindowBuffer* buffer);
        static int hook_dequeueBuffer_DEPRECATED(ANativeWindow* window,
                ANativeWindowBuffer** buffer);
        static int hook_lockBuffer_DEPRECATED(ANativeWindow* window,
                ANativeWindowBuffer* buffer);
        static int hook_queueBuffer_DEPRECATED(ANativeWindow* window,
                ANativeWindowBuffer* buffer);
        /*.......*/
    public:
        /*这两个函数主要是CPU绘图时调用,除了获取,映射Buffer之外,额外将非脏区域从上一块Buffer拷贝到本块Buffer,以便渲染时只绘制脏区域*/
        virtual int lock(ANativeWindow_Buffer* outBuffer, ARect* inOutDirtyBounds);
        virtual int unlockAndPost();
        /*.......*/
    private:
        struct BufferSlot {
            sp<GraphicBuffer> buffer;
            Region dirtyRegion;
        };
        /*Buffer生产者,Surface*/
        sp<IGraphicBufferProducer> mGraphicBufferProducer;
        BufferSlot mSlots[NUM_BUFFER_SLOTS];
        /*通过native_window_set_buffers_dimensions改变,用于在合适的时机改变GraphicBuffer的长宽*/
        uint32_t mReqWidth;
        uint32_t mReqHeight;
        /*需求的GraphicBuffer格式,用于动态调整*/
        PixelFormat mReqFormat;
        /*需求Usage说明,影响GraphicBuffer的flags*/
        uint32_t mReqUsage;
        /*时间戳,用于判断Buffer是否过期*/
        int64_t mTimestamp;
        /*Buffer的使用范围*/
        Rect mCrop;
        /*Buffer后续变换需求,只包括水平、垂直翻转,90度旋转*/
        uint32_t mTransformHint;
        /*BufferProducer是否由使用Surface的App控制,这个主要是用来决定dequeueBuffer时是否堵塞*/
        bool mProducerControlledByApp;
        /*......*/
    };
    
    }; // namespace android

    窗口的创建

    用于图形显示的窗口,是由SurfaceFlinger进程负责创建的:
    Surface创建
    为应用层创建Surface(窗口)时,SurfaceFlinger同步创建一个Layer,并将Layer的生产者关联到Surface上。这样,应用侧便可以通过Surface申请Buffer,作为生产者渲染图像,送显由Layer中的消费者负责。

    Buffer循环机制

    对于按一定帧率刷新的窗口系统,每一次渲染只有很有限的时间,频繁地申请/释放图形内存是不可接受的。Android的做法是维护一个Buffer队列,按生产者——消费者模式循环利用。这个Buffer就是上一章所述的GraphicBuffer。

    Buffer的状态

    Buffer队列池中持有固定数量的Buffer(由setBufferCount函数决定,一般是3块),每个Buffer有四种状态,决定其是否可以被生产者/消费者访问。
    Buffer状态变化

    Buffer的生产

    序号化

    由于Layer位于SurfaceFlinger进程中,GraphicBuffer是在SurfaceFlinger进程中创建的。应用层作为生产者,使用时需要将其映射到自己的进程空间。在每次申请Buffer时都做一次映射很不明智。
    很容易想到的一个方法是在应用层建一个GraphicBuffer队列,和SurfaceFlinger中的Buffer队列对应地映射起来,每次申请和返还时,以序号代替真实的GraphicBuffer传替。Android也正是这么做的。

    dequeueBuffer

    Surface::dequeueBuffer(android_native_buffer_t** buffer, int* fenceFd)
    这接口用于申请内存进行生产(渲染)。
    于Surface侧,它获取Buffer的序列号,然后检查是否已经同步过,若没有同步过调用requestBuffer同步(映射共享内存)。
    于BufferQueue侧,它检查是否有 FREE 标志的Buffer,如果没有,根据 mProducerControlledByApp 标志决定返回错误码或者等待。
    fenceFd是BufferQueue返回给Surface的,生产者有义务去等fence。

    queueBuffer

    int Surface::queueBuffer(android_native_buffer_t* buffer, int fenceFd)
    于Surface侧,它将Buffer送还给BufferQueue,但这不一定表示生产者用完了,消费者获取到Buffer之后仍有义务等fence。
    于BufferQueue侧,接收到Buffer,将其放到一个可用队列中,修改状态,并且触发监听器的onFrameAvailable函数。

    Buffer的消费

    acquireBuffer

    消费者获取buffer,由于在queueBuffer时,会将Buffer放到一个队列中,这时便从那个队列去取。

    releaseBuffer

    消费者释放buffer。

    展开全文
  • 算法训练 图形显示

    千次阅读 2015-01-13 16:05:43
    算法训练 图形显示 时间限制:1.0s 内存限制:512.0MB   问题描述  编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):  * * * * *  * * * *  * * *  * *  *  #...
  • 在Linux下安装Oracle数据库...xclock显示时钟 1. vncserver 如果报错 command not found,则 a.yum install tigervnc-server b.然后再设置密码 c.执行 vncserver 2.根据vncserver执行的结果执行以下操作 a...
  • 后面是发现有进入图形界面的情况。  问题原因: 我将/home/old_user 修改 /home/new_user之后,/etc/passwd文件里面对应的名字没有修改。   解决办法:当然是修改/etc/passwd修改对应的名字。  
  • vncserver 图形界面显示

    万次阅读 2014-01-06 16:17:46
    如果Linux本地端已经启用Gnome或KDE图形环境,当VNC客户端连接服务器后,可能会只显示灰屏,没有正常启用图形环境。查看~/.vnc下的日志时会提示错误:You arealready running a session manager。   ...
  • 具体说一下情况,就是带相机漫游功能的场景中; 绘制的多边形物体,从z轴正向看的话,显然没有图像,但是把相机绕到z轴负方向就绘制出了图像 这个问题主要是因为在工程中glEnable( GL_CULL_FACE );...
  • Dashboard图形显示之开源工具:Grafana

    万次阅读 2016-08-03 20:17:40
    两天之前Grafana刚刚release的它的3.1.1版,当然在应用场景和受众等诸多因素远远赶上今年的Kubernetes1.3和Docker1.12所引起的关注,在特定的场景,特别是基于是序列数据的图形综合自动展示的开源产品中,Grafana...
  • 装完Zabbix监控,修改中文后,发现图形页面数据字段显示为方框或乱码,如下 下载标准中文字体,如楷体字体simkai.ttf(https://pan.baidu.com/s/1NOHVkVdPMxQey7aV_1_0yA 提取:u3n7),将字体文件拷贝到zabbix...
  • 硬件合成器-HwComposer使用3D合成,需要大面积的像素混合计算和大量的内存传输(GPU读写GraphicBuffer所需),对GPU和DDR来说是一个巨大的...进一步,直接让这个芯片连LCD,在LCD需要显示某一行时在线合成。 HwCompo
  • 概述  VGA是一种学习FPGA最常见的基础实验。虽然现在的显示屏大多已经采用DVI和HDMI方案,但其实...  现在2017年全国大学生电子设计大赛还有到一个月,熟练的使用VGA显示各种图形、文字、波形还是很重要的,而
  • 一段AWT的: package cn.edu.csdn.gui; import java.awt.BorderLayout; import java.awt.Button; import java.awt.CardLayout; import java.awt.Frame; import java.awt.Label; import java.awt.Panel; import ...
  • ”,如果验证通过,则告知用户“输入信息有误”。下面附上图形界面下实现该简单登录功能的源码。效果比较简陋,欢迎大家一起交流学习! public class Login {  static String username;  static String user...
  • 当能用workbench等图形化操作界面登录MySQL却忘记root密码时如何查看密码。 1. 登录workbench 执行: use mysql;...得到的字符串“*F861720E101148897B0F5239DB926E756B1C28B3”密码的MD5加密格...
  • 该型号液晶屏内部无字库,只能自建字模进行字符显示(使用方法与图形显示方式一致);字模可通过“字模提取”软件提取,省去手工建模 的麻烦。 整体电路图  功能说明:该电路使用AT89C52作控制器,电路左下方...
  • 如何将QLineEdit密码显示样式更改

    千次阅读 2018-01-26 10:47:17
    如何将QLineEdit密码显示样式更改,例如,将默认圆点改方框 查询QSS官方文档可知: 利用lineedit-password-character:可以设置密码显示样式,9679代表QLineEdit默认样式,这个数字其实就是Unicode表中实心圆点...
  • 米思齐Mixly图形化编程---数管时钟

    千次阅读 2019-10-20 18:43:57
    文章目录实验材料与环境:【实验一】实现滚动显示自定义字符串1.软硬件连接2.图形化编程块3.代码块4.效果图【实验二】实现显示自定义时间【实验三】实现显示秒表 实验材料与环境: 硬件:Arduino、TM1637数码管 软件...
  • stm32+lcd显示汉字之DIY图形及导入字库

    千次阅读 多人点赞 2020-02-25 23:42:22
    上一篇博客,给大家介绍了在LCD上显示汉字/特殊图形需要知道对应的显示编码(GBK/ASCII),显示编码对应着每个图形的点阵集(数组),我们可以通过这个点阵集,将自己DIY的图形显示在LCD上面。现在先说一下怎么...
  • Java Swing 图形界面开发简介

    万次阅读 多人点赞 2017-05-30 23:52:47
    Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分。Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口、标签、按钮、文本框等。Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 ...
  • 无法显示图形界面对与无法显示图形界面基本上可以确定是和显卡驱动有关系。对于使用Nvidia或者AMD显卡的人,如果你安装了官方的闭源驱动那么基本上每次内核更新都需要重新安装一次驱动。因为驱动安装的时候要重新...
  • 本地显示远程服务器图形界面

    万次阅读 2017-11-27 19:23:46
    1.VNC连接时及时突然中断(比如断网),影响操作进行;2.需要在服务器上装软件,需要在你的电脑上装相应软件,使用SSH协议;3.正版要钱 方案二 VNC(Virtual Network Computing) 1.本地操作突然中断,服务器...
  • ubuntu下ssh客户端连接显示图形界面

    万次阅读 2011-11-01 21:43:06
    在windows下用ssh连接服务器的话putty是一个小巧而且实用的工具,如果想要图形界面,可以使用X工具配合putty。或者直接使用xmanager enterprise,非 常方便。 如果在ubuntu系统下,ssh客户端一般是自带的,如果...
  • 在xenserver上面安装LINUX虚拟机支持图形界面。这是由于LINUX默认安装在XenServer是以HVM模式安装的,无法使用图形界面。这个需要进行模式转换,这就对于我们对习惯命令行界面的人来说就比较麻烦了。而
  • 一次关机之后无法登陆图形界面,输入密码用户名登录后,会跳转好黑色屏幕/dev/nume0n1p5: clean, xxxxfiles,xxxxblocks。然后再跳转回到登陆界面。求大神赐教 ...
  • 左侧这个句子可以代替JScrollPane scrollPanel=new JScrollPane(textArea); /* javax.swing.JScrollPane JScrollPane(Component c) 创建一个滑动窗格,用来显示指定组件的内容。当组件内容超过显示范围时,...
  • Java 图形界面开发--图文并茂建立学生管理系统

    万次阅读 多人点赞 2016-03-19 19:52:28
    图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。 关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~ ...
  • CentOS7.6 显示图形界面 防坑记录

    千次阅读 2018-12-19 03:44:52
    (一)CentOS7.6 图形界面 爬坑记 (1)yum -y groupinstall "X Window System" (2)yum grouplist (3)yum -y groupinstall "GNOME Desktop" (4)startx (5)systemctl set-defaulr ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,027
精华内容 68,410
关键字:

为什么图形码显示不了