Fontbreite in italic

AckiB

Mitglied
Hi,
leider weiß ich nicht, wo ich diese Frage sonst stellen könnte... :confused:

Ich möchte die Breite eines Zeichens (Buchstabe) für eine bestimmte Font ermitteln...
Das klappt auch ganz gut, solange ich keine kursive Font erstelle...
Bei kursiven Fonts ist die berechnete Breite zu klein !?
Code:
// We use the desktop as dc
HWND hWnd = GetDesktopWindow();
HDC dc = GetDC(hWnd);
// and create the font
HFONT font = CreateFont(
  -MulDiv(fontSize, GetDeviceCaps(dc, LOGPIXELSY), 72),
  0, 0, 0,
  bold ? FW_BOLD : 0,
  italic,
  fontUnderline,
  0, 0, 0, 0, 0, 0,
  fontName
);
// calculate text extents.
HGDIOBJ oldfont = SelectObject(dc, font);
SIZE size;
size.cx = 0;
size.cy = 0;
int posx = 0;
int posy = 0;
for(i = 0; i < characterCount; i++){

  // hier muss der Fehler sein
  GetTextExtentPoint32W(dc, &testString[i], 1, &size);
  ++size.cx;

  if((posx + size.cx + 1) > surfaceWidth){
    // new row
    posx = 0;
    posy = posy + size.cy + 1;
  }
}
ist da irgendwo ein Fehler drin ?
(wahrscheinlich)

danke, Acki
 
Zuletzt bearbeitet:
Hat niemand eine Idee ?

Wie würdet ihr denn alle Zeichen eines Fonts in eine Bitmap schreiben ?
Ich möchte die Zeichen eines beliebigen Fonts in etwa so auswerten:
Code:
for(i = 0; i < characterCount; i++){
  d = &asciiTable[i];
  TextOutW(bmpdc, 0, 0, &d->character, 1);
  for(int y = 0; y < d->height; y++){
    for(int x = 0; x < d->width; x++){
      // Die Bitmap wird hier bearbeitet (analysiert)
    }
  }
}
asciiTable hällt alle Zeichen als char und bmpdc ist der Bitmap-Handle...
 
Zurück