0

我的窗户里有一个带纹理的盒子。在此框顶部使用 QuickFont 打印文本。由于要添加大量文本而不是一次全部添加,因此刷新此屏幕会花费时间。为了节省时间和资源,我想用文本截屏框并将其用作纹理,这要快得多,因为在第一次渲染后没有什么可解析的。

我可以让 glControl 自行设置屏幕帽并将其保存到位图,但屏幕上没有文本。(仅供参考,这应该是药房标签打印输出的所见即所得渲染)

有没有办法让文本也保存?

            if (GraphicsContext.CurrentContext == null)
            throw new GraphicsContextException();

        Bitmap bmp = new Bitmap(frm1.ClientSize.Width, frm1.ClientSize.Height);
        System.Drawing.Imaging.BitmapData data =
            bmp.LockBits(frm1.ClientRectangle, System.Drawing.Imaging.ImageLockMode.WriteOnly,
            System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        GL.ReadPixels(0, 0, frm1.ClientSize.Width,frm1.ClientSize.Height,
            OpenTK.Graphics.OpenGL.PixelFormat.Bgr, PixelType.UnsignedByte, data.Scan0);
        bmp.UnlockBits(data);

        bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);
        bmp.Save("Move.bmp", ImageFormat.Bmp);
        bmp.Dispose();

在此处输入图像描述

4

1 回答 1

0

我无意中发现了答案。通过单击两次抓住屏幕帽的按钮,第二个按钮显示了正确的信息,包括文本。

即使对屏幕截图的调用发生在文本“假定”渲染并且缓冲区已被交换之后,它仍然会从触发 OnClick 事件时屏幕上的内容中抓取屏幕截图。

我将研究的解决方案只是制作一个布尔值(已完成)并在文本渲染段的末尾将其设置为 true 并具有

while (Finished = true){ Do bitmap stuff here }

或者有一个计数器变量,它为解析的每一行文本进行计数,当它达到最大值(即所有内容都已呈现)时,它调用抓取屏幕截图方法。)

于 2011-12-27T22:41:01.977 回答