How to measure the pixel width of a digit in a given font / size (C#)

后端 未结 5 1865
闹比i
闹比i 2021-01-04 23:53

I am trying to calculate the pixel width of Excel columns, as described in this post, using the official formula from the OpenXML specification. However, in order to apply t

5条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-05 00:51

    First let me say that the code I'm about to show looks like a horrible hack and I'm not presenting it as a solution. Rather, I'm hoping it reveals a little more about the behavior of MeasureText that might lead you to your final solution.

    I made a slight alteration to your code. I'm measuring the length of two underscore characters. Then, in the body of the for loop I'm measuring the desired character with underscores on either side and subtracting the length of the two underscore characters alone. For the test scenario I am getting a result of 7. The main purpose of this was to determine whether MeasureText is accounting for padding on a character-by-character basis or padding at the beginning/ending of the string. It seems that it is the latter. Perhaps this, combined with some of the other input you've received, will lead you to a more elegant solution.

    var font = new Font("Calibri", 11.0f, FontStyle.Regular);
    int underscoreWidth = TextRenderer.MeasureText("__", font).Width; 
    for (var i = 0; i < 10; i++)
       {
          int charWidth = TextRenderer.MeasureText(String.Concat("_", i.ToString(), "_"), font).Width - underscoreWidth;
          Debug.WriteLine(charWidth);
       }
    

提交回复
热议问题