none
Вывод изображения на PictureBox RRS feed

  • Вопрос

  • Для программы необходимо реализовать функцию для работы с объектами типа PictureBox. В функцию передаем, допустим, некоторое значение uint16N, необходимую текстуру aImage и указатель на My_PictureBox. Значение uint16N указывает какое количество прямоугольников с текстурой aImage необходимо добавить в My_PictureBox. Пишу следующий код:

     

    private void PaintImage(UInt16 uint16N, Bitmap aImage, PictureBox My_pictureBox)
     {
      Graphics graphic = My_pictureBox.CreateGraphics();
       TextureBrush myBrush = new TextureBrush(aImage);
        
      for (UInt16 i = 1; i != uint16; i++)
      {
       if(i * 20 > 370)
        My_pictureBox.Size = new Size(i * 20, 180);
       graphic.FillRectangle(myBrush, (i * 20 + 20), 10, 15, 150);
      }
        
      myBrush.Dispose();
     }
    

     

    Если в процессе работы данной функции размер My_pictureBox не изменяется(необходимое количество изображений помещается в текущий размер My_pictureBox), то вроди бы все хорошо, но если его как-то "потревожить", то по окончании выполнения функции он приобретает белый фон. Как видно из кода, можем нарисовать со смещением довольно внушительное количество картинок, поэтому "просто сделать размер My_pictureBox большим" не получится.

    Подскажите пожалуйста, как избавиться от этой проблемы, почему "картинка" затирается белым фоном?

    16 декабря 2010 г. 7:09

Ответы

  • Попробуйте следующее

    private void PaintImage(UInt16 uint16N, Bitmap aImage, PictureBox My_pictureBox)
    {
      if (My_pictureBox.Size.Width < uint16N * aImage.Width)
      {
        My_pictureBox.Size = new Size(uint16N * aImage.Width, My_pictureBox.Size.Height);
        My_pictureBox.Refresh();
      }
    
      Graphics graphic = My_pictureBox.CreateGraphics();
      TextureBrush myBrush = new TextureBrush(aImage);
    
      for (UInt16 i = 0; i < uint16N; i++)
        graphic.FillRectangle(myBrush, (i * aImage.Width), 0, aImage.Width, aImage.Height);
    
      myBrush.Dispose();
    }
    

    • Помечено в качестве ответа Maximys33 17 декабря 2010 г. 9:04
    16 декабря 2010 г. 13:46