2013-08-24 2 views
1
private static Bitmap[] renders = new Bitmap[characters]; 
    public static void initBitmaps() 
    { 
     fontWidth = TextRenderer.MeasureText("c", font).Width; 
     fontHeight = TextRenderer.MeasureText("c", font).Height; 
     for (int i=0; i<characters; i++) 
     { 
      renders[i] = new Bitmap(fontWidth, fontHeight); 
      using (Graphics g = Graphics.FromImage(renders[i])) 
      { 
       g.DrawString(Convert.ToChar(i + 32).ToString(), font, new SolidBrush(Color.Black), new PointF(0, 0)); 
      } 
     } 
    } 

После выполнения этого бита кода все растровые изображения пустые (RawData являются пустыми). Что я делаю не так?DrawString(), похоже, не работает

(шрифт в вопросе фиксированной ширины, так что размер не должен быть проблемой)

+1

эта проблема может быть решена быстро, используя точки останова. Может быть, он попал в ваш блок использования? – Arash

+7

Это не пусто, вы просто не можете его увидеть. Вы рисуете черную кисть на черном фоне. Вам нужно хотя бы инициализировать растровое изображение, используйте g.Clear (Color.White). Также обратите внимание, что вы смешиваете TextRenderer с графикой, плохая идея. И вы будете разочарованы тем, как W и M подойдут. –

+0

Да, это так ... –

ответ

0

DrawString работает отлично и растровые изображения не пусты, вы просто не можете увидеть текст, потому что вы рисуете с черной кистью на черном фоне.

Вам нужно будет инициализировать растровое изображение; использование g.Clear(Color.White). Также обратите внимание, что вы смешиваете TextRenderer с Graphics.DrawString, что является плохой идеей. См. DrawString vs. TextRenderer для получения дополнительной информации.

Если вы попробуете пропорциональные шрифты, вы будете разочарованы тем, как W и M подойдут, потому что вы измеряете размеры нижнего регистра c, который (в большинстве шрифтов) будет меньше, чем в верхнем регистре W.

+0

Отмечено как сообщество wiki, потому что все кредиты для ответа на этот вопрос перейдите на @Hans Passant – ventiseis

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