2

コントロールコンストラクターでいくつかのペンとブラシを作成するユーザーコントロールがあり、それらをビットマップでの描画に使用します。.Net Compact Framework を使用していますGraphics。私のビットマップは毎回作成され、毎秒ペンが作成されます。驚くべきことに、同じ色のペンが3つある場合は、作成されるだけです。PensGreen, Red and Blue100 ms202 Pens100 msPens1 Pen

サンプルコード:

       public MyTestControl()
        {
            InitializeComponent();
            _barBrush = new SolidBrush(Color.Red);
            _func1Pen = new Pen(Color.Red);
            _func2Pen = new Pen(Color.Blue);
            _func3Pen = new Pen(Color.Green);
        } 

      protected override void OnPaint(PaintEventArgs e)
        {
            if (_bmpScreen == null)
            {
                _bmpScreen = new Bitmap(ClientRectangle.Width, ClientRectangle.Height);
                _gBmp = Graphics.FromImage(_bmpScreen);    
            }

            _gBmp.Clear(Color.White);    
            DoDrawings();    
            //
            e.Graphics.DrawImage(_bmpScreen, 0, 0);
        }

     private void DoDrawings()
        {
            if (Data == null) return;

            switch (Data.Length)
            {
                case 1:
                    DrawGraph(Data[0].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func1Pen);
                    break;
                case 2:
                    DrawGraph(Data[0].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func1Pen);
                    DrawGraph(Data[1].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func2Pen);
                    break;
                case 3:

                    DrawGraph(Data[2].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func1Pen);
                    DrawGraph(Data[0].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func2Pen);
                    DrawGraph(Data[1].Where(val => val != Config.NO_DATA_VALUE).ToArray(), _func3Pen);
                    break;
                default:
                    break;
            }

        }

private void DrawGraph(int[] data, Pen pen)
        {
            if (data == null) return;           

            Point[] newPoints = GetDataPoints(data);
            DrawLines(newPoints, pen, _gBmp);           
        }



private void DrawLines(Point[] newPoints, Pen functionPen, Graphics g)
        {
            g.DrawLines(functionPen, newPoints);
            }

注: 私は使用して.Net Compact Framework 3.5おり、私のリフレッシュ レートは100 ms 私が使用して.Net Compact Framework Remote Performance Monitor20 Pensます。secondNumber of Pens Created increases by 20 every second

2 Pensビットマップを更新するたびに作成する原因は何ですか?

4

0 に答える 0