0

ウィンドウにテクスチャボックスがあります。このボックスの上に、QuickFontを使用してテキストが印刷されます。一度に多くのテキストが追加されるわけではないため、この画面を更新するには時間がかかります。時間とリソースを節約するために、ボックスをテキストでスクリーンショットし、最初のレンダリング後に解析するものがないため、はるかに高速なテクスチャとして使用したいと思います。

glControlにスクリーンキャップ自体を取得してビットマップに保存できますが、画面にテキストが表示されません。(FYIこれは薬局のラベルのプリントアウトの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();

ここに画像の説明を入力してください

4

1 に答える 1

0

たまたま答えにたどり着きました。スクリーン キャップを取得するボタンを 2 回クリックすると、2 回目のボタンでテキストを含む正しい情報が表示されました。

スクリーンショットへの呼び出しは、テキストが「おそらく」レンダリングされ、バッファーがスワップされた後に発生しますが、OnClick イベントが発生した瞬間に画面上にあるものからスクリーンショットを取得しています。

私が検討する解決策は、ブール値 (完成) を作成し、テキスト レンダー セグメントの最後でそれを true に設定することです。

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

または、代わりに、解析されたテキストの各行をカウントアップするカウンター変数を用意し、最大値に達すると (つまり、すべてがレンダリングされます)、グラブ スクリーンショット メソッドを呼び出します)。

于 2011-12-27T22:41:01.977 に答える