2011-12-22 96 views
0

我的窗戶裏有一個紋理盒子。在這個框的頂部使用QuickFont進行文本打印。由於有很多文本被添加,而不是一次全部添加,因此需要花費時間來刷新該屏幕。爲了節省時間和資源,我想用文本對文本框進行screencap,並將其用作紋理,因爲在第一次渲染後沒有任何東西需要解析。保存OpenTK屏幕的位圖,但QuickFont文本不顯示?

我可以讓glControl屏蔽上蓋本身並將其保存到位圖中,但屏幕上沒有文字。 (F.Y.I這應該是藥房標籤打印輸出的所見即所得渲染)

有沒有辦法讓文本保存呢?

  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(); 

enter image description here

回答

0

我無意中得到答案時偶然發現。通過點擊兩次抓住屏幕帽的按鈕,第二個顯示正確的信息,包括文本。

即使在屏幕截圖調用發生在文本被「呈現」呈現並且緩衝區已被交換之後,它仍然抓取了OnClick事件觸發時屏幕上的內容。

的解決方案,我會考慮只是把布爾(成品),並在文本的結尾將其設置爲true呈現段和具有

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

或可選擇地有一個計數器變量爲每一行解析的文本計數,當它達到最大值時(IE所有東西都被渲染),它調用抓屏截圖方法。)