我的窗口里有一个带纹理的盒子。在此框的顶部,使用QuickFont打印文本。由于添加了大量文本而不是一次全部添加,因此刷新此屏幕会花费时间。为了节省时间和资源,我想用文本屏幕显示框,并将其用作纹理,速度要快得多,因为在第一次渲染后无需解析。
我可以将glControl设置为屏幕上限,并将其保存到位图,但屏幕上没有文字。 (F.Y.I这应该是药房标签打印输出的WYSIWYG渲染)
有没有办法让文字保存?
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();
答案 0 :(得分:0)
我偶然发现了答案。通过单击抓取屏幕盖两次的按钮,第二个按钮显示正确的信息,包括文本。
即使调用截图发生在文本被“假设”呈现并且缓冲区已经被交换之后,它仍然是在触发OnClick事件时从屏幕上的内容中抓取屏幕截图。
我将研究的解决方案是制作一个布尔(已完成)并在文本渲染段的末尾将其设置为true并具有
while (Finished = true){ Do bitmap stuff here }
或者有一个计数器变量,它为每行解析的文本计数,当它达到最大值时(I.E.所有内容都已渲染),它调用抓取截图方法。)