1

現在、C# datagridview を使用して、500 行以上 700 列以上を含むウェーハ マップを描画しています。

ただし、いくつかの問題があります。

  1. パフォーマンスが遅い。列幅を調整する必要があるため、ループして個別に割り当てる必要があります。

    for (int i = 0; i < this.dgvCompleteMapGrid.Columns.Count; i++)
    {
      this.dgvCompleteMapGrid.Columns[i].Width = 8;
    }
    
  2. ウェーハマップはほぼ丸い形をしているので、値のあるセルのセル境界を描画するだけで済みます。私はcellpaintingイベントを使用しています:

     if (e.Value != null) {
            if (e.Value.ToString() == "")
            {
             e.AdvancedBorderStyle.All = DataGridViewAdvancedCellBorderStyle.None;                    
            }
            else
            {                    
                if (e.Value.ToString() == "1")
                {
                    e.CellStyle.BackColor = Color.Lime;
                }
                else
                {
                    e.CellStyle.BackColor = Color.Red;
                }
    
                //check if the top border set None for neighbor empty value cell
                if (e.AdvancedBorderStyle.Top.ToString() == "None")
                {
    
           e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.Single;
                }   
                //repeat the same for left right and bottom
            }
        }
    

ただし、ほとんどのセルで複数の境界線の複製が描画されるようです。

Datagridview は推奨されますか? パネルに四角形を描画しようとしましたが、パフォーマンスがさらに低下します。

4

1 に答える 1

0

これは、ピクセル化されたサイズ変更(補間ではなく)を可能にする私のPictureboxです。たとえば、Microsoft Paint の写真を拡大するのと似ています。

using System.Windows.Forms;

namespace WireWorld
{
    public class ZoomablePicturebox : PictureBox
    {
        public ZoomablePicturebox()
        {
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            pe.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
            pe.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
            pe.Graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
            pe.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
            base.OnPaint(pe);
        }
    }
}

ビットマップを生成するには、次のようなものを使用します。

// Pick width and height for your case
Bitmap MyBitmap = new Bitmap(width, height);
using (var g = Graphics.FromImage(retVal))
    g.Clear(BackColor); // Pick a background fill color
// Draw your points, whatever your loop needs to be and your point definition is
foreach (MyPointDef point in _Points)
{
    MyBitmap.SetPixel(point.X, point.Y, point.Color);
}

次に、フォームのパネルに画像ボックスを配置しました。次に、パネルはスクロールを提供します。次のように画像とズームを設定できます。

canvasPB.SizeMode = PictureBoxSizeMode.Zoom; // Ensures picture is resized as we resize picturebox
canvasPB.Image = MyBitmap;
canvasPB.Height = canvasPB.Image.Height * Zoom; // Zoom is 1, 2, 3, etc, for 1X, 2X, ...
canvasPB.Width = canvasPB.Image.Width * Zoom;

canvasPB は、キャンバスとして使用しようとしているフォームの Picturebox の名前です。

于 2013-10-29T20:33:38.103 に答える