• 0

DrawText API and Font Sizes


Question

Ok. So I've managed to cobble together a ENUMLOGFONTEXDV, with a ENUMLOGFONTEX inside, which contains a LOGFONT with a Height of, say, 24. I then use SelectObject() to select the handle to that ENUMLOGFONTEXDV in my Graphics object, and use DrawText() to draw it. The unfortunate thing is that that 24 for, whatever reason, is in Pixels, and not in the format the is used for determining font sizes.

If i call Veranda and Georgia like this, they come out to the same size, when in Word, size 24 Veranda is larger than size 24 Georgia.

How do I calculate what values I should be using?

Link to comment
https://www.neowin.net/forum/topic/443480-drawtext-api-and-font-sizes/
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Yeah, I realize that now. I picked another font pair, with a vast obvious difference, and have the same problem.

If I call this with 50 for FontSize, I get 67, which I use for my LOGFONT's lfHeight.

MulDiv(FontSize, GetDeviceCaps(ptr1, 90), 72)

These are the two fonts I'm using,post-47827-1142631655_thumb.jpg

and my results.post-47827-1142631662.jpg

  • 0

Yeah, that's a problem. lol! But you already knew that. Would you mind posting your code?

Actually, I think I have an idea. Is the rectangle you specify for DrawText the same for both? Regardless of the font size, when GDI paints, it will paint within the rect you give it.

  • 0

Ok. Maybe I'm just getting my rectangle the wrong way.

			IntPtr ptr1 = graphics.GetHdc();
			SelectObject(ptr1, HandleToENUMLOGFONTEXDV);
			RECT r = new RECT();
			DrawText(ptr1, "Test1", 4, ref r, DT_CALCRECT | DT_LEFT | DT_SINGLELINE);

Shouldn't r now be the RECT I want to call DrawText again (but without DR_CALCRECT) with?

  • 0

Hmmmm... Sorry, I'm a bit rusty with Win32. I hadn't noticed the DT_CALCRECT flag.

I believe your assertion is correct. If the rect needs resizing in any case, it won't draw the text but it will resize the rect. Give it a whirl. I don't have a sandbox to play in and doing all the imports for C# would take some time.

  • 0
  Dayon said:

....Any more ideas?

Use GDI+?

			using (Graphics g = Graphics.FromHwnd(this.Handle))
			{
				using (Font f1 = new Font("Blue Highway", 24f))
				{
					g.DrawString("Test!", f1, Brushes.Black, new PointF(25f, 25f));
				}

				using(Font f2 = new Font("Cargo Two SF", 24f))
				{
					g.DrawString("Test!", f2, Brushes.Black, new PointF(150f, 25f));
				}
			}

That drew the attachment:

  • 0
  weenur said:

:pinch: wth? lol that's a wierd side effect.

Yeah, you threw a '-' in front of the MulDiv. I dropped it. (Stupid me.)

I found this on MSDN:

  Quote
lfHeight

Specifies the height, in logical units, of the font's character cell or character. The character height value (also known as the em height) is the character cell height value minus the internal-leading value. The font mapper interprets the value specified in lfHeight in the following manner.

Value Meaning

> 0 The font mapper transforms this value into device units and matches it against the cell height of the available fonts.

0 The font mapper uses a default height value when it searches for a match.

< 0 The font mapper transforms this value into device units and matches its absolute value against the character height of the available fonts.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Videomass 5.0.26 by Razvan Serea Videomass is not just a common converter, it features file concatenation, time trimmer, ability to create thumbnails, tiled mosaics and animated giffs from movies; it has sophisticated GUIs for video filters, previews for video stabilization, resizing, croping, transposing, color equalization. It features PEAK, RMS and EBU audio normalization with streams indexing capabilities, a volume analyzer, audio preview and many more interesting features… For the people that are familiar with FFmpeg, it has a highly customizable preset manager with the possibility to easily make your own presets through the GUI and adapt this to your specific needs or create new presets using the FFmpeg command line. For less experienced people there are also ready-to-use presets. It offers out-of-the-box all possible file formats like MP4, M4V, M4A, MKV, AVI, OGV, WEBM, MP3, AC-3, WAV, OPUS, FLAC, OGG and encoders like MPEG-4, H.264/AVC, H.265/HEVC, VP8, VP9, LIBAOM-AVI, VORBIS, PCM, LAME, ALAC, etc. Also you can copy audio or video streams (lossless mode) without re-encoding, or extract audio from videos and much more! Main features No ads Multi-Platform, work on Linux, MacOs, Windows, FreeBsd. Batch processing. Queue management (only available for Presets Manager and A/V Conversions). Advanced log file management. Multi-panels, switch between panels using keyboard shortcuts. Audio/video processing using advanced tools and sophisticated filters interfaces. While downloading audio or video you can now do other transcoding tasks. Multi languages support (English, French, Italian, Russian, Dutch, Portuguese-BR, simplified Chinese, Spanish-ES, Spanish-CU, Spanish-MX) Conversions and transcoding Drag and drop to add multiple files simultaneously. Fully customizable presets and profiles. Possibility to create your new presets and profiles from scratch. Has useful presets to start with. Using the Presets Manager, you can set any format and codec supported by your FFmpeg build. Media file info (from FFprobe) and streams analyzer (from volumedetect). Shows the estimated time of arrival during encodings. Concatenate, merge media files losslessly. Create Slideshows. Extract images from video. Ability to switch between different FFmpeg builds. Has useful graphical tools for evaluating the supported features of a specific FFmpeg build. Audio stream mapping using selectable indexes. You can set both audio and video to copy when you just want to convert formats (lossless process). Timeline editor to slice time segments or trim the duration of your media even without re-encoding and therefore without loss of quality. It has GUI video filters such as: Resize Crop Transpose Deinterlace Denoise Stabilize Equalize Audio filters for volume normalization such us: PEAK, RMS and EBU-R128 normalizers. PEAK and RMS volume analysis reporting. Ability to select specified audio streams in videos to apply volume normalization. and much more… Videomass 5.0.26 changelog: Fixed yt-dlp preferences tab issue #372 Enabled import of the external «yt_dlp» package also on the standalone executable built by Pyinstaller. Improved handling of the yt-dlp executable (yt-dlp.exe on Windows) which now provides some automation and useful information for the users. Added «Whale» browser to the supported browser list for cookie automations. Update it_IT i18n, thanks to @bovirus Update zh_CN i18n, thanks to @userwljs Removed API functionality for download operations. Now only the yt-dlp executable is used for download operations. The API is still needed and will only be used for statistics extraction and format code listing. Fixed #374 Added «FLAC resampler» new preset. Notes: FFmpeg is not included in this archive. Before launching the application, ensure you have a compatible version of FFmpeg for your system architecture (requires ffmpeg.exe, ffprobe.exe, and ffplay.exe, version 5.1 or newer). For more details and downloads, visit: Gyan's FFmpeg builds page BtbN's FFmpeg GitHub releases page Antivirus False Positive Detection Some antivirus programs may mistakenly flag Videomass.exe as malicious. These are false positives. To resolve this, submit the Videomass.exe file to your antivirus vendor for further analysis and request a false positive review. Download: Videomass 5.0.26 | 18.4 MB (Open Source) Links: Videomass Home Page | Screenshots | Other OSes Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • Who could have thought that Microsoft's (not an ad business) browser is better at blocking ads than Google's (the ad business) browser.
    • So, Microsoft Edge should be behind Firefox and Chrome, because most average users have not heard about it and don't know it's exist.
    • adjusting cleartype did very little, almost nothing.   I will continue to tell people NOT to upgrade to 11 because of this issue.   If I can't customize the computer I OWN, then it's no longer MY COMPUTER!   Screw MS for this omission!
  • Recent Achievements

    • Week One Done
      abortretryfail earned a badge
      Week One Done
    • First Post
      Mr bot earned a badge
      First Post
    • First Post
      Bkl211 earned a badge
      First Post
    • One Year In
      Mido gaber earned a badge
      One Year In
    • One Year In
      Vladimir Migunov earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      488
    2. 2
      +FloatingFatMan
      259
    3. 3
      snowy owl
      244
    4. 4
      ATLien_0
      222
    5. 5
      +Edouard
      191
  • Tell a friend

    Love Neowin? Tell a friend!