2014-04-05 5 views
0

Мне интересно, возможно ли это: У меня есть приложение C# с чем-то вроде дисплея, состоящего из около 11000 кругов, нарисованных на Форме.C# рисование текста с использованием пользовательских пикселей

То, что я хочу достичь, - это возможность рисовать текст на этом дисплее, но не использовать «реальные» пиксели, а использовать круги (прямоугольники), нарисованные на форме в виде пикселей.

Edit 1:

При составлении текста в C#, вы бы то использовать что-то вроде Graphics.DrawString(...), давая метод прямоугольник (так координаты), в котором текст должен быть нарисован в этом тексте, то рисуется. в этом прямоугольнике, используя пиксели экрана. То, что я хочу сделать, это рисовать текст, но не использовать пиксели экрана, но мои пользовательские пиксели, из которых состоит мой дисплей.

Edit 2

Метод, используемый для рисования кругов на форме; Circles - это список, состоящий из Circle объектов, где circleRectangle возвращает координаты, в которых должен быть нарисован круг, а Filled указывает метод, если круг должен быть заполнен или нет.

public void DrawCircles(Graphics g) 
    { 

     graphics = g; 
     graphics.SmoothingMode =System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
     Pen pen = new Pen(Color.Black, penthickness); 
     SolidBrush brush = new SolidBrush(Color.White); 
     for (int j = 0; j < Circles.Count;j++) 
     { 
      graphics.DrawEllipse(pen, Circles[j].CircleRectangle); 
      if (Circles[j].Filled) 
       brush.Color = fillColor; 
      else 
       brush.Color = Color.White; 
      graphics.FillEllipse(brush, Circles[j].CircleRectangle); 

     } 

    } 

Возможно ли это, и если да, как бы я это сделал?

+0

Пожалуйста, вы можете уточнить, что именно вы имеете в виду? Постскриптум http://en.wikipedia.org/wiki/Pixel – john

ответ

3

Вы можете писать на невидимом битовом методе DrawText, а затем сканировать пиксели растрового изображения и включать соответствующие круги.

Произошло это на прошлой неделе с ячейками DataGridView. Очень просто.

Вот код:

public void drawText(string text, Font drawFont) 
    { 
     Bitmap bmp = new Bitmap(canvasWidth, canvasHeight); 
     Graphics G = Graphics.FromImage(bmp); 
     SolidBrush brush = new SolidBrush(paintColor); 
     Point point = new Point(yourOriginX, yourOriginY); 

     G.DrawString(text, drawFont, brush, point); 

     for (int x = 0; x < canvasWidth; x++) 
      for (int y = 0; y < canvasHeight; y++) 
      { 
       Color pix = bmp.GetPixel(x, y); 
        setCell(x, y, pix);  //< -- set your custom pixels here! 
      } 
     bmp.Dispose(); 
     brush.Dispose(); 
     G.Dispose(); 
    } 

Edit: Вы должны использовать свои размеры и ваше происхождение для DrawString, конечно

+0

Большое вам спасибо - похоже, это то, что я ищу; Я попробую это и приму ответ как можно скорее! – VGD

+0

Конечно, удачи. Две вещи, которые я заметил: - Неисправленные пиксели будут иметь значение канала Aplha равным 0. - И увеличение показывает, что сглаживание пикселей гало букв всех цветов. Если у вас есть вопросы, спросите! – TaW

+0

Пробовал, работает. Большое спасибо! – VGD

Смежные вопросы