Почему не отображается графика? - PullRequest
0 голосов
/ 22 января 2019

Я хочу сохранить все Drawstring, которые сделаны с кодами в нижней половине. Я сохраняю его, сохраняя «Точки» в виде списка. Цель сохранения заключается в том, что я хочу иметь возможность удалять конкретный чертеж. Все остальные рисунки будут сохранены, и будет удален только тот, который хочет удалить. Мой основной вопрос заключается в том, почему я не могу использовать тот же код с небольшим редактированием (верхняя половина кода - это код, который я использую для добавления новой Drawstring), которую я использую для рисования, чтобы перерисовать при удалении определенного чертежа.

Side_pictureBox.ImageLocation = AppDomain.CurrentDomain.BaseDirectory + @"pictures for app\Bus_Nearside.png";
Side_pictureBox.Image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + @"\pictures for app\Bus_Nearside.png");
Bitmap bm = new Bitmap(Side_pictureBox.Image);
if (Tagged_Remarks_listBox.SelectedIndex == 0)
{
  for (int x = 0; x <= NumberingPosition.Count - 1; x++)
  {
    if (x != 0)
    {
      using (Graphics gr = Graphics.FromImage(bm))
      {
        gr.SmoothingMode = SmoothingMode.AntiAlias;
        Font drawFont = new Font("Calibri (Body)", 15);
        SolidBrush drawBrush = new SolidBrush(Color.Blue);
        //MessageBox.Show(Numbering[u] + NumberingPosition[u]);
        gr.DrawString(Numbering[x], drawFont, drawBrush, NumberingPosition[x]);
      }
    }
    Side_pictureBox.Image = bm;
    Side_pictureBox.Invalidate();
  }

// Выше кода, когда я впервые рисую строку, ниже кода перерисовать при удалении конкретного чертежа //

Bitmap bm = new Bitmap(Side_pictureBox.Image);


                    using (Graphics gr = Graphics.FromImage(bm))
                    {
                        gr.SmoothingMode = SmoothingMode.AntiAlias;

                        String drawString = numbering_for_digram.ToString();
                        Font drawFont = new Font("Calibri (Body)", 15);
                        SolidBrush drawBrush = new SolidBrush(Color.Blue);

                        gr.DrawString(drawString, drawFont, drawBrush, lastPoint);
                        Numbering.Add(drawString);


                        drawFont.Dispose();
                        drawBrush.Dispose();
                    }

                    Side_pictureBox.Image = bm;

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Я нашел способ заставить его работать (может быть, не самый лучший, самый эффективный и эффективный способ), используя Bitmap для всех чертежей.Это растровое изображение будет сохранено в виде файла Png.После того, как все рисунки сделаны, я объявляю файл picturebox.image как файл Png растрового изображения.

private void Side_pictureBox_Paint(object sender, PaintEventArgs e)
{
    if (Tagged_Remarks_listBox.SelectedIndex == 0 && selectedindexreset == true)
    {
        //Side_pictureBox.ImageLocation = AppDomain.CurrentDomain.BaseDirectory + @"pictures for app\Bus_Nearside.png";
        Side_pictureBox.Image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + @"\pictures for app\Bus_Nearside.png");
        Bitmap bmforedit = new Bitmap(Side_pictureBox.Image);

        //MessageBox.Show("inside");

        using (Graphics gr = Graphics.FromImage(bmforedit))
        {
            for (int x = 0; x <= NumberingPosition.Count - 1; x++)
            {
                //MessageBox.Show(x.ToString());
                if (Numbering[x] != "1") // change accordingly
                {
                    //MessageBox.Show(Numbering[x]);
                    gr.SmoothingMode = SmoothingMode.AntiAlias;
                    Font drawFont = new Font("Calibri (Body)", 15);
                    SolidBrush drawBrush = new SolidBrush(Color.Blue);
                    //MessageBox.Show(Numbering[x] + NumberingPosition[x]);

                    gr.DrawString(Numbering[x], drawFont, drawBrush, NumberingPosition[x]);

                    drawFont.Dispose();
                    drawBrush.Dispose();
                }
            }
            // bmforedit.Save(@"C:\Users\user\Desktop\PDI_APP_EDIT_FOR_TO\PDIPROTOTYPE2\bin\Debug\pictures for app\TestImage.png");
            Side_pictureBox.Image.Dispose();
            //bmforedit.Save(@"C:\Users\user\Desktop\PDI_APP_EDIT_FOR_TO\PDIPROTOTYPE2\bin\Debug\pictures for app\TestImage1.png");
            Side_pictureBox.Image = bmforedit;
        }

        for (int u = 0; u <= PrevStore.Count - 1; u++)
        {
            using (Graphics g = Graphics.FromImage(bmforedit))
            {
                if (u < StartDrawCount[0] || u > StopDrawCount[0])
                {
                    g.DrawLine(new Pen(Color.DarkRed, 2), PrevStore[u], NowStore[u]);
                    g.SmoothingMode = SmoothingMode.AntiAlias;
                }
            }
        }

        bmforedit.Save(@"C:\Users\user\Desktop\PDI_APP_EDIT_FOR_TO\PDIPROTOTYPE2\bin\Debug\pictures for app\TestImage2.png");
        selectedindexreset = false;
        Side_pictureBox.ImageLocation = AppDomain.CurrentDomain.BaseDirectory + @"pictures for app\TestImage2.png";
        Side_pictureBox.Refresh();
    }
}
0 голосов
/ 23 января 2019

Если мы находимся в событии Paint (), то я ожидаю увидеть что-то похожее на это:

if (Tagged_Remarks_listBox.SelectedIndex == 0)
{
    Graphics gr = e.Graphics;
    gr.SmoothingMode = SmoothingMode.AntiAlias;
    Font drawFont = new Font("Calibri (Body)", 15);
    SolidBrush drawBrush = new SolidBrush(Color.Blue);
    for (int x = 1; x <= NumberingPosition.Count - 1; x++)
    {       
        //MessageBox.Show(Numbering[u] + NumberingPosition[u]);
        gr.DrawString(Numbering[x], drawFont, drawBrush, NumberingPosition[x]);
    }
    drawFont.Dispose();
    drawBrush.Dispose();
}

Обратите внимание, что вызов Invalidate () в Paint () вызовет егоперекрасить себя REPEATEDLY и FOREVER ... что может быть частью проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...